LAG功能无法完成

时间:2015-04-23 01:40:25

标签: sas lag

我正在构建一张生命表。我的数据如下:

age    npx       
=================
0-1    0.996
1-4    0.9955
5-9    0.9966

我想构建一个新变量lxlx的{​​{1}}值为age="0-1"。 对于之前的记录,100,000的值为"1-4"

这是我的代码:

lx * npx

在第二条记录之后,程序停止计算 if age = "0-1" then lx = 100000; lag_lx = lag1 (lx); lag_npx = lag1 (npx); lx = lag_lx * lag_npx; ; 从记录3开始,lxlx(缺失)

2 个答案:

答案 0 :(得分:4)

我会沿着ifn路线前进,因为它没有搞砸你认为是滞后值的东西,它使代码非常简单(读取this paper)。您还需要@Alex A。

所述的retain声明
data have;
    input age $ npx;
    datalines;
0-1    0.996
1-4    0.9955
5-9    0.9966
;

data want;
set have;
retain lx;
lx = ifn(age='0-1',100000,lx*lag(npx));
run;

答案 1 :(得分:0)

问题是只有在使用LAG时,值才会存储在LAG中。来自support.sas.com:“在队列底部存储值并从队列顶部返回值仅在执行函数时发生。有条件执行的LAGn函数的出现将仅存储和返回值条件得到满足的观察结果。“

这段代码并不漂亮,可以改进,但它可以完成这项工作。

data have;
    input age $ npx;
    datalines;
0-1    0.996
1-4    0.9955
5-9    0.9966
;

data want;
    set have;   
    IF _N_ = 1 Then lx = 100000;
            lag_lx  = lag(lx);
            lag_npx = lag(npx);
    IF _N_ ne 1 Then lx = lag_lx * lag_npx;
            lag_lx  = lag(lx);
            lag_npx = lag(npx);
    IF _N_ ne 1 Then lx = lag_lx * lag_npx;
RUN;