Насколько я знаю, вам нужно сканировать весь набор данных.
Примерно так должно работать (предупреждение: не проверено и может содержать опечатки, так как у меня нет установки 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;