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;