我希望将变量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值仍然是标准化的时,如何获得所需的结果?
答案 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;