滞后功能在SAS中不起作用

use*_*178 5 sas

这是我的程序的一部分.(oldindex和oldreadmit在保留表示)

问题是它适用于oldindex = 1然后readmit = 1但不起作用滞后(oldreadmit)= 1然后readmit = 1.你能告诉我这是什么问题吗?提前致谢!

else if 0< gap <= 30 then do;
     index_d=0;
     if lag(oldreadmit)=1 or oldindex=1  then readmit=1;
         else oth=1;
     oldindex=index_d; 
     oldreadmit=readmit;
     end;
Run Code Online (Sandbox Code Playgroud)

itz*_*tzy 9

SAS lag功能引起了很多混乱,但是一旦你理解了它的工作原理就有意义了.假设您有3个观察值,并且您有一个if语句,导致在处理过程中跳过第二个观察.如果然后将滞后函数应用于第三个观测值,它将返回第一个观测值,而不是第二个观测值,因为上次处理任何观测值都是针对第一次观测.

这意味着,在组合滞后和if语句时要小心.在您的代码中,您在子句中有一个延迟,只有在if语句为真时才会执行该子句.这会给你带来奇怪的结果.你应该做的是定义一个变量,比如说l_oldreadmit,等于滞后,然后在if语句中使用它.

这将有效:

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;
Run Code Online (Sandbox Code Playgroud)