The SAS lag
function is a cause for much confusion, but once you understand how it works it makes sense. Suppose you have 3 observations, and you have an if statement that causes the second observation to be skipped during processing. If you then apply the lag function to the third observation, it will return the first observation, not the second, because the last time any observation was processed was for the first observation.
What this means is, be careful when combining lags and if statements. In your code, you have a lag in a clause that will only be executed if an if
statement is true. This will give you weird results. What you should do is define a variable, say l_oldreadmit
, to equal the lag before using it in the if statement.
This will work:
l_oldreadmit = lag(oldreadmit);
if (... whatever you have here ...);
else if 0< gap <= 30 then do;
index_d=0;
if l_oldreadmit=1 or oldindex=1 then readmit=1;
else oth=1;
oldindex=index_d;
oldreadmit=readmit;
end;
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…