在SAS中添加缺失数据行

在SAS中添加缺失数据行,sas,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,并在pulse列中添加缺失值(N

考虑名为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,并在pulse列中添加缺失值(NA)。我想对所有缺少值的ID执行此操作。如何在SAS中执行此操作?

根据数据集的大小,您可以使用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;

您可以使用
lag
功能来度过上一次。如果您知道时间以设定的顺序(0,5,10,15)出现,则通过将当前行中的时间与滞后值进行比较,您就知道是否需要插入新行。这可以通过
输出
功能来完成

我想说
proc transpose
对于您的情况非常适合。将数据从长格式更改为宽格式时,它将为您填充缺少的值

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

然后您只需将数据
WANT
更改回long格式。

Hi Keith,想多读一点关于这方面的内容,所以我查看了proc means文档,发现了这样一句话:“使用COMPLETETYPES不会增加内存需求。”您有关于COMPLETETYPES如何影响内存的更多信息吗?来源:与其说是COMPLETETYPES选项,不如说是PROC SUMMARY,尤其是在使用ID语句时。在这个例子中只有一个变量,但我发现如果你输入多个变量,它会导致内存故障。