这是我的程序的一部分.(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)
简
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)
| 归档时间: |
|
| 查看次数: |
4058 次 |
| 最近记录: |