Sas 通过复制以前的值来插补缺失的值
我的数据采用以下格式:Sas 通过复制以前的值来插补缺失的值,sas,Sas,我的数据采用以下格式: 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
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;
谢谢 如果我正确理解了你的问题,有几种简单的方法可以做到这一点。最简单的方法是使用
滞后
和合并
功能。不幸的是,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;