更新时间:2023-01-13 18:10:08
这是一个通用宏,您可以使用它生成源数据集中空列的列表,然后您可以将其传递给 drop 语句.它使用proc格式和proc freq,所以速度相对较快.
Here's a generic macro that you can use to generate a list of the empty columns in the source data set, which you can then pass to a drop statement. It uses proc format and proc freq so it is relatively fast.
%macro findmiss(ds,macvar);
%local noteopt;
%let noteopt=%sysfunc(getoption(notes));
option nonotes;
*ds is the data set to parse for missing values;
*macvar is the macro variable that will store the list of empty columns;
%global &macvar;
proc format;
value nmis .-.z =' ' other='1';
value $nmis ' '=' ' other='1';
run;
ods listing close;
ods output OneWayFreqs=OneValue(
where=(frequency=cumfrequency
AND CumPercent=100));
proc freq data=&ds;
table _All_ / Missing ;
format _numeric_ nmis.
_character_ $nmis.;
run;
ods listing;
data missing(keep=var);
length var $32.;
set OneValue end=eof;
if percent eq 100 AND sum(of F_:) < 1 ;
var = scan(Table,-1,' ');
run;
proc sql noprint;
select var into: &macvar separated by " "
from missing;quit;
option ¬eopt.;
%mend;
以下是您可以使用它的方法:
Here is how you might use it:
%findmiss(old,droplist); /*generate the list of empty columns */
data new;
set old(drop=&droplist);
run;