【发布时间】:2013-04-22 11:06:47
【问题描述】:
我正在尝试用设定的条件填充变量。
如果变量 NUMBER 等于 .然后使其等于之前的 Number 值。
data table2;
set table1;
prv_value = lag(number);
if number = . then number = prv_value;
run;
但是,如果在 number = 的一行中有两个值。然后第二次出现 的值。有它以前的 number = 值。 .
我想要的是找到第一个先前出现的数字不等于 .并使 number 的值等于先前的非缺失值。
我的数据的一个例子是:
id number
d10 2
d10 2
d10 3
d10 .
d10 .
应用上面的代码我会得到:
id number prv_number
d10 2 .
d10 2 2
d10 3 2
d10 3 3
d10 . .
我想要的是:
id number prv_number
d10 2 .
d10 2 2
d10 3 2
d10 3 3
d10 3 .
即如果 number 的值为 .然后使其等于之前第一次出现的非缺失值。
在我的数据集中的某些情况下,我可能有:
id number
d10 4
d10 2
d10 .
d10 .
d10 .
d10 .
而我想要的是:
id number
d10 4
d10 2
d10 2
d10 2
d10 2
d10 2
(请注意,我的数据是按事件/时间顺序排序的,因此需要第一次出现)。
对于不同数量的先前事件,我可以对 lag 函数做些什么,或者任何其他可以做我想做的事情?
【问题讨论】:
-
阿米尔使用保留的答案是要走的路。我建议在几乎所有情况下都不要使用
lag函数,因为它在语义上臭名昭著,难以识别错误。