考虑名为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中执行此操作?
答案 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
更改为长格式。