我试图在sas中做一个递归滞后,我刚学到的问题是x = lag(x)在SAS中不起作用。
我的数据格式类似于:
id date count x
a 1/1/1999 1 10
a 1/1/2000 2 .
a 1/1/2001 3 .
b 1/1/1997 1 51
b 1/1/1998 2 .
我想要的是,给定第一个计数的x,我希望每个连续的x by id为滞后(x)+某个常数。
例如,假设:if count> 1然后x = lag(x)+ 3。 我想要的输出是:
id date count x
a 1/1/1999 1 10
a 1/1/2000 2 13
a 1/1/2001 3 16
b 1/1/1997 1 51
b 1/1/1998 2 54
答案 0 :(得分:4)
是的,SAS中的滞后功能需要一些理解。您应该阅读相关文档(http://support.sas.com/documentation/cdl/en/lefunctionsref/67398/HTML/default/viewer.htm#n0l66p5oqex1f2n1quuopdvtcjqb.htm)
如果条件语句的滞后在“then”内,我倾向于使用保留变量。
data test;
input id $ date count x;
informat date anydtdte.;
format date date9.;
datalines;
a 1/1/1999 1 10
a 1/1/2000 2 .
a 1/1/2001 3 .
b 1/1/1997 1 51
b 1/1/1998 2 .
;
run;
data test(drop=last);
set test;
by id;
retain last;
if ^first.id then do;
if count > 1 then
x = last + 3;
end;
last = x;
run;