如何在大型数据集中找出没有观察结果的变量?

时间:2011-06-16 16:33:55

标签: variables sas

我有一个SAS数据集,其中包含超过1300个变量。大约有200-300个变量没有任何观察结果。有没有办法获得没有观察的这些变量的列表,以便我可以从数据集中删除这些变量?

2 个答案:

答案 0 :(得分:1)

如果它们是数字,您可以这样做:

proc means data=sashelp.class n nmiss;
  var _numeric_;  
run;

干杯 罗布

答案 1 :(得分:0)

据我所知,您必须扫描整个数据集。

这样的事情应该有效(警告:未经测试,可能包含拼写错误,因为我没有安装SAS设备)。

%macro drop_unused(libname=,memname=);

proc sql noprint;
  select trim(put(count(1), 8. -L)) into :count_vars from sashelp.vcolumn
    where libname eq "%upcase(&libname)" and memname eq "%upcase(&memname)";
  select trim(left(name)) into :var_1-:var_&count_vars from sashelp.vcolumn
    where libname eq "%upcase(&libname)" and memname eq "%upcase(&memname)";
quit;

data _null_;
  length __missing $ 32767;
  set &libname..&memname end=lastrec;
%do i=1 %to &count_vars;
  retain __missing_&i 'y';
  if not missing(&&var_&i) then __missing_&i = 'n';
%end;
  if lastrec then do;
%do i=1 %to &count_vars;
    if __missing_&i eq 'y' then __missing = trim(left(__missing)) || ' ' || "&&vars_&i";
%end;
    call symput('missing', trim(left(__missing)));
  end;
run;

data new_data;
  set &libname..&memname (drop=&missing);
run;

%mend;