在SAS中添加缺失数据行

时间:2014-06-11 01:31:56

标签: sas

考虑名为test的数据集的以下模式:

 id   time  pulse
 1    0      120
 1    5      100
 1    10     80
 1    15     50
 2    0      110
 2    5      70
 2    10     60
 3    0      114
 .    .      .
 .    .      .

请注意,id 2缺少时间15.我想为id 2添加一行,显示时间15和脉冲列中的缺失值(NA)。我希望对所有缺少值的ID执行此操作。我将如何在SAS中执行此操作?

3 个答案:

答案 0 :(得分:1)

根据数据集的大小,您可以使用PROC SUMMARY中的COMPLETETYPES选项为您执行此操作。这在内存中运行,可能会导致非常大的数据集出现问题。

data have;
input id   time  pulse;
datalines;
 1    0      120
 1    5      100
 1    10     80
 1    15     50
 2    0      110
 2    5      70
 2    10     60
 3    0      114
 .    .      .
 .    .      .
 ;
 run;

 proc summary data=have nway completetypes;
 class id time;
 id pulse;
 output out=want (drop=_:);
 run;

答案 1 :(得分:0)

您可以使用lag功能来完成上一次。如果您知道时间以设置顺序(0,5,10,15)发生,那么通过将当前行中的时间与滞后值进行比较,您知道是否需要插入新行。这可以使用output函数

来完成

答案 2 :(得分:0)

我会说proc transpose对你的情况完全正常。它会在将数据从长格式更改为宽格式时为您填写缺失的值。

PROC TRANSPOSE DATA=HAVE OUT=WANT (drop=_name_);
    VAR PULSE;
    BY ID;
    ID TIME; 
RUN;

然后您只需将数据WANT更改为长格式。