OK. Assuming dose should never be a negative value .
data have;
infile cards truncover;
input sub vis & $10. dos ;
cards;
100 WEEK 1 5
100 WEEK 1 5
100 WEEK 1 5
100 WEEK 2
100 WEEK 2 5
100 WEEK 2 5
100 WEEK 3 5
100 WEEK 3 5
100 WEEK 3 5
100 WEEK 4 5
100 WEEK 4
100 WEEK 4 5
100 WEEK 5 5
100 WEEK 5 5
100 WEEK 5
101 WEEK 1
101 WEEK 1
101 WEEK 1
101 WEEK 2
101 WEEK 2
;
run;
data want;
set have;
by sub vis;
retain group 'DDOS ';
retain MAXWKDOS MINWKDOS ;
output;
wdos+dos;
if last.vis then do;
group='WDOS ';dos=wdos;if dos gt 0 then output;
CUMDOS+wdos;MAXWKDOS=max(MAXWKDOS,wdos); MINWKDOS =min(MINWKDOS,wdos);
group='DDOS';wdos=0;
end;
if last.sub then do; call missing(vis);
group= 'CUMDOS ';dos=CUMDOS; if dos gt 0 then output;
group='MAXWKDOS';dos=MAXWKDOS; if dos gt 0 then output;
group='MINWKDOS';dos=MINWKDOS; if dos gt 0 then output;
CUMDOS=0; MAXWKDOS=0; MINWKDOS=999999;group='DDOS';wdos=0;
end;
drop CUMDOS MAXWKDOS MINWKDOS wdos;
run;
Xia Keshan
... View more