仅基于变量值的空列 - SAS 数据集

Null Columns only based on a variable value - SAS Dataset

我有一个非常大的 SAS 数据集,其中包含 280 多个变量,我需要根据变量值检索所有完整的 NULL 列。例如,我在此数据集中有一个名为 Reported 的变量(只有值 Yes 和 No),我想根据值 No 找出此数据集中所有完整的空列。

有没有什么快速的方法可以在不为完整的 NULL 值写入所有列名的情况下找到这个问题?

例如,如果我在 table、

中有 4 个变量

所以基于上面的 table 我希望看到这样的输出,其中 Var4='No' 并且只有 return 包含所有缺失值的列

这将帮助我识别在 Var4 值为 'No'

时根本没有填充的变量

注意 PROC FREQ 中的 WHERE 语句。

proc format;
   value $_xmiss_(default=1 min=1 max=1) ' '  =' ' other='1';
   value  _xmiss_(default=1 min=1 max=1) ._-.Z=' ' other='1';
   quit;

%let data=sashelp.heart;


proc freq data=&data nlevels;
   where status eq: 'A';
   ods select nlevels;
   ods output nlevels=nlevels;
   format _character_ $_xmiss_. _numeric_ _xmiss_.;
   run;

data nlevels;
   length TABLEVAR  TABLEVARLABEL 8 NLEVELS NMISSLEVELS NNONMISSLEVELS 8;
   retain NLEVELS NMISSLEVELS NNONMISSLEVELS 0;
   set nlevels;
   run;

我认为这个问题有两个部分。首先是对 Reported = "N" 处的记录进行子集化。然后在这些记录中,报告具有所有缺失值的列。如果这是正确的,那么您可以执行以下操作(我假设缺少值的列都是数字。如果不是,则此方法需要稍作修改):

/* Thanks to REEZA for pointing out this way of getting the freqs. This eliminates some constraints and is more efficient */
proc freq data=have nlevels ;
  where var1 = "N" ;
  ods output nlevels = freqs;
  table _all_;
run;

proc sql noprint;
  select TableVar into :cols separated by " " from freqs where NNonMissLevels = 0 ;
  quit;

%put &cols;


data want;
  set have (keep = &cols var1);
  where var1 = "N" ;
run;