我正在构建一张生命表。我的数据如下:
age npx
=================
0-1 0.996
1-4 0.9955
5-9 0.9966
我想构建一个新变量lx
。 lx
的{{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开始,lx
有lx
(缺失)
答案 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;