通过复制以前的值来估算缺失值

时间:2017-10-30 20:06:48

标签: 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   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;

谢谢!

1 个答案:

答案 0 :(得分:2)

如果我正确理解你的问题,你可以通过几种简单的方法来做到这一点。最简单的方法是使用lagcoalesce函数。不幸的是,当涉及缺失值时,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;