For a derived type with allocatable components, I have a subroutine to ALLOCATE it. There is not much tedium:
type :: date_frame
character (len=1000) :: title = ""
type(date_mdy) , allocatable :: dates(:) ! (nobs)
character (len=len_sym) , allocatable :: sym(:) ! (nvar)
real(kind=dp) , allocatable :: xx(:,:) ! (nobs,nvar)
logical , allocatable :: good(:,:) ! (nobs,nvar)
character (len=len_name), allocatable :: names(:) ! (nvar)
end type date_frame
subroutine alloc_date_frame(df,nobs,nvar,xinit,good_init)
! allocate a date_frame to have the specified number of observations and variables
type(date_frame), intent(out) :: df
integer , intent(in) :: nobs,nvar
real(kind=dp) , intent(in), optional :: xinit
logical , intent(in), optional :: good_init ! value to which df%good is initialized
allocate (df%dates(nobs),df%sym(nvar),df%xx(nobs,nvar),df%good(nobs,nvar))
if (present(xinit)) df%xx = xinit
if (present(good_init)) df%good = good_init
end subroutine alloc_date_frame