data test;
input usubjid visitc $10. visitn hr;
cards;
1 Screening 1 91
1 Day 2 .
1 Week 1 3 68
1 Week 2 4 73
1 Week 4 5 96
2 Screening 1 .
2 Day 1 2 73
2 Week 1 3 73
2 Week 2 4 52
2 Week 4 5 59
;
run;
*** Separate baseline and post-baseline values; data baseline postbase; set test; if visitn <= 2 then output baseline; else output postbase; run; *** Baseline value is last non-missing value before first dose; data baseline1 (keep=usubjid hr rename=(hr=bl)); set baseline (where=(hr is not missing)); by usubjid visitn; if last.usubjid; run; *** Combine with post-baseline data and calculate change from baseline; data postbase1; merge postbase (in=inp) baseline1 (in=inb); by usubjid; chgbl = hr - bl; run;
***DOW--LOOP ****; data postbase; do until (last.usubjid); *** Only keep non-missing pre-dose values; set test (where=(not(visitn <= 2 and hr is missing))); by usubjid visitn; if visitn <= 2 then bl = hr; else do; chgbl = hr - bl; output; end; end; run;