sas - 在 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;
尽管这无法通过非缺失值的平均值填充所有缺失值。许多缺失值仍然存在。
在大多数组中,缺失值比非缺失值多。我预计这可能会使标准化变得不可能。
当组中的大多数值都缺失但非缺失值仍然是标准化的时,我怎样才能达到预期的结果?
解决方案
我会使用双 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;
推荐阅读
- tcp - 如何使用跟踪路由发出 TCP SYN 请求
- clojure - 如何简化 Compojure 路由?
- sql - 在三个不同条件下加入同一张表
- list - 如何从列表中删除“项目列表”?
- javascript - 为什么 vue-cookies 在一个视图中工作,而不是另一个?
- javascript - 如何获取原生格式的 HTML?
- arrays - 按子元素选取列表的元素
- python - 如何在 Python 中使用 Scipy 从层次集群中推断集群解决方案的准确性?
- mysql - 将数据库列转换为表列 Laravel Blade
- git - VS Code Source Control 上的通知出乎意料