在SAS中添加缺失数据行
考虑名为test的数据集的以下模式:在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
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语句时。在这个例子中只有一个变量,但我发现如果你输入多个变量,它会导致内存故障。