Параметр nlevels
в proc freq
возвращает количество различных значений в каждом столбце.Поэтому любые столбцы, в которых все значения одинаковы, будут иметь значение уровня nlevel 1.
Если вы уверены, что это правило будет применяться только к столбцам «Null», то вы можете использовать этот метод (т. Е.минимум 2 различных значения имени, рода занятий и т. д.)
Значение nlevel
не включается автоматически в выходную таблицу в пределах proc freq
, поэтому вам нужно использовать ods output
, чтобы получить имена столбцов вТаблица.Затем вы можете назначить их макропеременной, которая будет использоваться в операторе drop
в любой процедуре анализа, которую вы используете.Или вы можете удалить их, как вы просили, в шаге данных.(Я обычно предпочитаю первый вариант, на случай, если действительные данные будут удалены ошибочно).
DATA test;
INPUT name$ favourite_food$ occupation$ favourite_sport$;
CARDS;
John Null Nurse Null
Michelle Null Lawyer Null
Peter Null Teacher Null
Kai Null Doctor Null
run;
/* identify columns with only 1 distinct value and output to a table */
ods output nlevels = distinct_values (where=(nlevels=1));
proc freq data=test nlevels;
run;
/* store column names in macro variable */
proc sql noprint;
select tablevar into :drop_cols separated by ' '
from distinct_values;
quit;
%put &drop_cols;
/* exclude columns from analysis */
proc freq data=test (drop=&drop_cols.);
run;