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

标签: listvariablessas

解决方案


  1. 使用 STACKODS 和 ODS 汇总以一步而不是多步获取所需格式的表格。这将其限制为总和,因为如果总和 = 0,则所有值均为 0。您可能还需要查看舍入以避免任何数值精度问题。

PROC MEANS + PROC TRANSPOSE 转到:

ods select none;
proc means data= &x. stackods sum;
var _numeric_;
ods output summary = sumT;
run;

推荐阅读