You will have a much better chance of someone answering if you post your example data as a datastep, e.g.
data have;
length id 8 drug $1 start end score 8;
informat start end mmddyy10.;
format start end date9.;
input ID drug start end SCORE;
cards;
1 A 06/01/2020 11/15/2020 2
1 B 08/01/2020 09/09/2020 1
1 C 06/01/2020 07/01/2020 3
1 D 10/01/2020 12/31/2020 4
2 A 01/15/2020 03/04/2020 2
2 C 01/27/2020 03/09/2020 3
3 A 03/01/2020 04/01/2020 2
3 C 03/26/2020 04/05/2020 3
3 D 03/28/2020 05/05/2020 4
4 A 04/04/2020 06/07/2020 2
4 C 04/12/2020 07/01/2020 3
;run;
I think the easiest way around this is to create a "long" dataset, with one entry for each drug, each day it was active:
data long;
set have;
do date=start to end;
output;
end;
drop start end;
format date date9.;
run;
Then sort that by ID and date, and calculate combination and score for each date:
proc sort data=long;
by id date drug;
run;
data long2;
length drugs $10;
total=0;
do until(last.date);
set long;
by id date;
call catx('+',drugs,drug);
total+score;
end;
drop drug score;
rename total=score;
run;
And finally, convert back to intervals:
data want;
do until(last.drugs);
set long2;
by id drugs notsorted;
if first.drugs then
start=date;
end;
format start date9.;
rename date=end;
run;
... View more