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.
Dear
You can have a view using the "Hash Iterator Object" inside this document "http://support.sas.com/rnd/base/datastep/dot/iterator-getting-started.pdf"
This one use a comparison between date and you can adapte using index funtion. The small table can be used as hash table.
Regards
Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.