%MACRO dropEmptyFlags(dataset_name);
DATA WORK.flag_names (KEEP=name);
SET SASHELP.VCOLUMN;
WHERE ( libname='WORK' AND UPCASE(memname)=UPCASE("&dataset_name") ) AND ( UPCASE(name) LIKE 'CE_%' OR UPCASE(name) LIKE 'SM_%');
RUN;
PROC SQL;
SELECT DISTINCT NAME INTO :flags SEPARATED BY ' '
FROM WORK.flag_names;
QUIT;
%LET flag_list=&flags;
%LET drop_list=%STR();
%DO i=1 %TO %SYSFUNC(COUNTW(&flags));
%LET flag=%SCAN(&flags,&i);
PROC SQL;
SELECT COUNT(&flag) INTO :triggered
FROM WORK.&dataset_name
WHERE &flag=1;
QUIT;
%IF &triggered=0 AND drop_list NE %STR() %THEN; %LET drop_list=%SYSFUNC(CATX(%str( ),&drop_list,&flag)) %ELSE %IF &triggered=0 %THEN %LET drop_list=&flag;
%END;
%PUT drop list is %SYSFUNC(COUNTW(&drop_list)) long out of %SYSFUNC(COUNTW(&flags)): SET WORK.&dataset_name(DROP=&drop_list);
%MEND; Hi there, I inherited this code from a colleague and am trying to understand what it does. I do not understand where the data is coming from for this macro, first and foremost, as work.Flag_names does not exist in my work library after running this code and doesn't exist anywhere else in the program. Could anybody help me decode this? Thank you!
... View more