You could make the macro return a value if you really have to have it that way, but it's not great programming practice in SAS: %MACRO checkForVars(var1,var2,var3); %let var1=%sysfunc(dequote(&var1)); %let var2=%sysfunc(dequote(&var2)); %let var3=%sysfunc(dequote(&var3)); %let dsid=%sysfunc(open(&inDS)); %let check=%sysfunc(varnum(&dsid,&var1)); %if &check ^= 0 %then %do; %let check=%sysfunc(varnum(&dsid,&var2)); %if &check ^= 0 %then %do; %let check=%sysfunc(varnum(&dsid,&var3)); %let rc=%sysfunc(close(&dsid)); %if &check ^= 0 %then %let out=Y; %end; %end; %else %do; %let rc=%sysfunc(close(&dsid)); %let out=N; %end; &out %MEND checkForVars; %let end_date_flg="%checkForVars('cdexpm','cdexpd','cdexpy')"; Notice the missing semicolon at the &out part of the macro. This will send the value of the variable out back to wherever the macro was called from. In this case, this macro sends back a value of "Y" or "N" to indicate whether one of the three variables passed to it exists in the dataset.
... View more