how about: data have; infile cards missover delimiter=',' ; informat hospital_dt mmddyy10.; format hospital_dt mmddyy10.; input id $1. (date1-date3)( :$4.) dosage1 dosage2 dosage3 hospital_dt; cards; 1, 1/2, 1/5, , 10, 20, .,12/1/2010 2, 1/10, , , 30, ., . ,11/1/2010 3, 1/2, 1/5, 1/31, 10, 20, 30,1/1/2011 4, , , ,.,.,.,4/1/2011 ; run; data want(keep=id cum: ); set have; array ds(120); array cum_dose(120); array dates(*) date:; array dosages(*) dosage:; do i=1 to 120; ds(i)=0 ; cum_dose(i)=0; end; do i=1 to dim(dates); j=mdy(input(scan(dates(i),1),2.),input(scan(dates(i),2),2.),2011)-hospital_dt+1; if j>0 and j le 120 then ds(J)=dosages(i); end; cum_dose(1)=ds(1); do i=2 to 120; cum_dose(i)=cum_dose(i-1)+ds(i); end; run;
... View more