我的数据采用以下格式:
Var1 Var1 Var1 Value1 Imputer_Value1 Value2 Imputer_Value2
A A1 A11 6 6 15 15
A A1 A11 9 9 14 14
A A1 A12 1 1 19 19
A A2 A12 1 16 16
A A2 A13 10 10 13 13
A A2 A13 4 4 . 13
B B1 B11 8 8 13 13
B B1 B11 9 9 17 17
B B1 B12 5 5 18 18
B B2 B12 . 5 12 12
B B2 B13 2 2 20 20
B B2 B13 1 1 . 20
我想通过复制上一组中的前一个值来估算缺失值。谁能告诉我怎么做?我试着按照这个选项。但是这没有多个值计算选项。
data imputedData;
set mydata;
n=_n_;
if missing(Value1) then
do;
do until (not missing(value1));
n=n-1;
set mydata(keep=Value1) point=n; *second SET statement;
end;
end;
run;
谢谢!
答案 0 :(得分:2)
如果我正确理解你的问题,你可以通过几种简单的方法来做到这一点。最简单的方法是使用lag
和coalesce
函数。不幸的是,当涉及缺失值时,lag
函数有时会产生意外结果。
以下是使用lag
的示例。
data want;
set have;
* The coalesce function returns the first non-missing value
* and the lag function returns the last value;
value1 = coalesce(value1, lag(value1));
value2 = coalesce(value2, lag(value2));
run;
如果这不起作用,那么您可能必须使用retain
声明。
data want;
set have;
retain val1 val2;
* If it's not the first record do;
if _n_ > 1 then do;
value1 = coalesce(value1, val1);
value2 = coalesce(value2, val2);
end;
val1 = value1;
val2 = value2;
run;