list - 从 SAS 数据集中删除具有全零值的变量
问题描述
我经常使用大量只有零值或空值的变量,但我找不到 SAS 命令来删除这些不需要的变量。我知道我们可以使用 SAS/IML,但是我多次遇到这种情况,并且希望有一个可以帮助我的宏,而无需键入变量名以避免错误。这是我仅删除零值变量的代码。它可以在不使用变量名称的情况下从原始数据集 x 生成清洁的输出数据集 y。我希望其他人可以有更好的解决方案或帮助我使我的更好。
%Macro dropZeroV(x, y) ;
proc means data = &x. ;
var _numeric_;
output out = sumTab ; run;
proc transpose data = sumTab(drop = _TYPE_) out= sumt; var _Numeric_; id _STAT_; run;
%let Vlst =;
proc sql noprint;
select _NAME_ into : dropLst separated by ' '
from sumT
where Max=0 and Min =0;
data &y.;
set &x.; drop &dropLst.;
run;
proc print data = &y.; run;
%Mend dropZeroV;
解决方案
- 使用 STACKODS 和 ODS 汇总以一步而不是多步获取所需格式的表格。这将其限制为总和,因为如果总和 = 0,则所有值均为 0。您可能还需要查看舍入以避免任何数值精度问题。
PROC MEANS + PROC TRANSPOSE 转到:
ods select none;
proc means data= &x. stackods sum;
var _numeric_;
ods output summary = sumT;
run;
推荐阅读
- google-sheets - 根据列号动态设置范围
- neo4j - 使用 Neo4j 的 Cypher:在收集中订购物品并且没有空对象
- python - 搜索元素的字典值
- git - git:将一个分支中的本地提交传播到另一个分支
- c# - 更新集合中的对象 C#
- amp-html - 在没有插件的情况下将 Wordpress 博客文章添加到 AMP-HTML 页面
- python - 如何使用 zipfile 压缩访问数据库
- mapbox - 一种在不丢失图层和源的情况下清除 mapbox FeatureCollections 的干净方法?
- model-view-controller - 无法理解 MVC 的控制器部分
- python - 尝试用某些点绘制图例时出现“KeyError: ('f', None)”