首页 > 解决方案 > 在 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;

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

在大多数组中,缺失值比非缺失值多。我预计这可能会使标准化变得不可能。

当组中的大多数值都缺失但非缺失值仍然是标准化的时,我怎样才能达到预期的结果?

标签: sas

解决方案


我会使用双 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;

推荐阅读