PLEASE HELP: The code is not working in this one situation: 7 v1 01jan2007 positive 7 v2 30jun2007 positive 7 v3 08nov2007 7 v4 01feb2008 positive 11 v1 09oct2006 11 v2 10nov2006 11 v3 12jan2007 positive 11 v4 13mar2007 postive output i want: id diff changed_result t0 t1 flag 7 180 0 01jan2007 30jun2007 . 11 60 0 12jan2007 13mar2007 . We are trying to calculate the days that they stay positive. The code I am using: data alg2; format id diff reversion t1 t2 flag; keep id diff reversion t1 t2 flag; set test; by id; retain type ; /* 1=start negative, 2=start positive, 0=changed */ retain pos1d; /* 1st positive date */ retain flag; /* 1=all negative, 2=all positive, .=changed */ retain t2; /* date used to calc diff */ retain diff reversion 0; retain skip; /* 1=skip next rows <<<<< new line added */ qft = lowcase(qft); if first.id then do; diff=.; skip=0; if qft = 'positive' then do; type=2; pos1d = t0; flag=2; end; else if qft = 'negative' then do; type=1; flag=1; end; else do; type = 0; flag=.; end; end; else if skip = 0 then do; /* <<<<< new line added */ if qft = 'positive' then do; if type ne 2 /* 1st positive which is not 1st in ID */ and diff=. then do; type=2; pos1d = t0; flag=.; end; else if flag=2 then do; diff=t0-pos1d; t2=t0; end; /* if type=2 no change need */ end; else if qft = 'negative' then do; if type =2 /* and diff=. /* 1st negative following positive(s) */ then do; diff = t0 - pos1d; t2=t0; flag=.; reversion=1; skip=1; end; /* if type is 1 or 0 no change need */ end; else do; if type =2 /* missing following positive(s) */ then do; reversion=0; flag=.; type=0; skip=1; end; end; end; /* <<<<< new line added */ if last.id then do; if flag=1 then do; diff=.; t1=.; t2=.; end; else if flag=2 then do; diff=t0 - pos1d; t1=pos1d; t2=t0; end; else do; if diff > 0 then do; t1=pos1d; /* reversion diff and t2 retained */ end; else do; diff=.; t1=.; t2=.; end; end; output; end; format t1 t2 date9.; run; data alg2x; set alg2; if flag=1 then reversion=0;/*all negatives*/ if flag=2 then reversion=0;/*all positives*/ if t1=. and t2=. then reversion=0; run; /*I added the last part to fit the algorithm*/
... View more