data have;
infile cards expandtabs;
input ID Drug $ (Start End) (: date11.);
format start end date11.;
cards;
1 DrugA 3-Aug-2006 28-Dec-2006
1 DrugB 3-Aug-2006 18-Nov-2007
1 DrugC 29-Dec-2006 15-Dec-2008
2 DrugA 3-Aug-2006 28-Dec-2006
2 DrugB 3-Aug-2006 18-Nov-2007
2 DrugC 29-Dec-2006 15-Dec-2008
;
data temp;
set have;
do date=start to end;
output;
end;
format date date11.;
drop start end;
run;
proc sort data=temp nodupkey;
by id date drug;
run;
data temp1;
do until(last.date);
set temp;
by id date;
length drugs $ 200;
drugs=catx('+',drugs,drug);
end;
drop drug;
run;
data temp2;
set temp1;
by id;
if first.id or dif(date) ne 1 or drugs ne lag(drugs) then group+1;
run;
proc sql;
create table want as
select max(id) as id,max(drugs) as drug,min(date) as start format=date11.,max(date) as end format=date11.
from temp2
group by group;
quit;
... View more