sas的递归延迟

时间:2014-09-26 17:32:54

标签: sas lag

我试图在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

1 个答案:

答案 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;