Its easy to solve this problem for specific hard coded treatment using array. But for a generic solution I will suggest to use proc transpose. Something like this should work: Data Have;
infile cards truncover;
input (ID Treatment1 Treatment2 Treatment3 Treatment4 Treatment5) ($) (Date1 Date2 Date3 Date4 Date5) (:date9.);
format date: date9.;
cards;
John A B B B A '01Jan2018'd '15Jan2018'd '16Jan2018'd '17Jan2018'd '01Feb2018'd
David A A B B A '01Jan2018'd '15Mar2018'd '05Jan2018'd '05Jan2018'd '05Feb2018'd
;
run;
proc sort data=Have;
by ID;
run;
proc transpose data=Have out=Treatments(Drop=_Name_ Rename=(Treatment1=Treatment)) Prefix=Treatment;
by ID;
Var Treatment:;
run;
proc transpose data=Have out=Dates(Drop=_Name_ rename=(Date1=Date)) Prefix=Date;
by ID;
Var Date:;
run;
Data Have_Transposed;
merge Treatments Dates;
by ID;
run;
proc sql;
Select ID, Treatment,max(Date) as Max_Date format date9. from Have_Transposed
group by ID, Treatment;
quit;
... View more