Automatic object of parameterized derived type

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