在SAS中:当组内缺失值的数量超过非缺失值时,按组标准化值

时间:2019-01-11 18:35:17

标签: sas

我希望将变量V2的值和变量V1标准化。我想用组V1中的所有非缺失值替换所有缺失的值。非缺失值是标准化的,在一个组中可能会出现多次。

拥有:

V1    V2
----------
 1    100
 1    -
 1    -    
 1    -
 1    -
 1    -
 1    100
 2    -
 2    -
 2    200
 3    -
 3    300
 3    300
 3    -
 3    -
 3    -

想要:

V1    V2
----------
 1    100
 1    100
 1    100    
 1    100
 1    100
 1    100
 1    100
 2    200
 2    200
 2    200
 3    300
 3    300
 3    300
 3    300
 3    300
 3    300

我用过:

Proc stdize data=have out=want missing=mean reponly;
By V1;
Var V2;
Run;

尽管这无法通过非缺失值的平均值来填充所有缺失值。许多遗漏的值仍然存在。

在大多数组中,缺失值多于非缺失值。我希望这可能无法实现标准化。

当一个组中的大多数值都丢失了,但非MISSION值仍然是标准化的时,如何获得所需的结果?

1 个答案:

答案 0 :(得分:1)

我将使用双DOW循环方法进行此操作:

data want;
  do _n_ = 1 by 1 until(last.v1);
    set have;
    by v1;
    if not(missing(v2)) and missing(fill_value) then fill_value = v2;
  end;
  do _n_ = 1 to _n_;
    set have;
    if missing(v2) then v2 = fill_value;
  end;
  drop fill_value;
run;