4

我正在尝试用设定的条件填充变量。

如果变量 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 函数做些什么,或者任何其他可以做我想做的事情?

4

1 回答 1

6

您可以尝试使用以下保留语句(未经测试):

data table2;
  set table1;

  retain prv_value .;

  if number=. then
    number=prv_value;

  if number ne . then
    prv_value=number;
run;
于 2013-04-22T11:30:54.420 回答