如何在SAS中查找变量的先前值

时间:2013-04-22 11:06:48

标签: sas lag

我正在尝试使用设置条件填充变量。

如果变量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

(注意,我的数据按事件/时间的顺序排序,因此需要先出现的第一个事件。)

对于之前出现的不同数量的滞后函数,还是其他任何可以做我想做的事情,我能做些什么吗?

1 个答案:

答案 0 :(得分:6)

您可以尝试使用retain语句,如下所示(未经测试):

data table2;
  set table1;

  retain prv_value .;

  if number=. then
    number=prv_value;

  if number ne . then
    prv_value=number;
run;