Great tip for appending large datasets with different variable attributes. Why can't you do it in one step though?
data sasdl.study_all (drop=v1-v4);
retain &varlist; *< -- preserve variable order ;
length subjid $6 dob start_date end_date 4; *<-- define new types/lengths ;
format dob start_date end_date mmddyy10.; *<-- recreate formats ;
set sasdl.study2016 (in=a rename=(subjid=v1 dob=v2 start_date=v3 end_date=v4)) sasdl.study2017 ;
if a then do;
subjid = put(v1,6.); *<-- redefine subjid variable ;
dob = v2; *<-- redefine dob variable ;
start_date = v3; *<-- redefine start_date variable ;
end_date = v4; *<-- redefine end_date variable ;
end;
run;