Maybe you need to add a further observation to a second HAVE dataset because multiple SET-Statements stop at the EOF of the shortest dataset: data have1; set have end=eof; output; if eof then do; stdt=.; endt=.; output; end; run; data want (drop=stdt1 _dia _dose); format stdt endt stdt1 date9.; do until (last.subjid); set have; by subjid; _dia=max(_dia,dia); end; do until (last.subjid); set have; by subjid; set have1 (firstobs=2 keep=stdt endt rename=(stdt=stdt1)) have (obs=1 drop=_all_) ; if endt=. then endt=stdt1-1; if dia=. then dia=_dia; _dose=ifn(dose=.,_dose,dose); if dose=. then dose=_dose; output; end; run; Best regards, Gerd
... View more