You can get more control by making your macro smart enough to detect the issues before they generate SAS errors and then skipping to the end of the macro. Something like:
%macro extract_basex();
%let anyerr=0;
%if not exist(&input_ds) %then %do;
%put ERROR: &=sysmacroname error. &=input_ds does not exist.;
%let anyerr=1;
%end;
%if anyerr %then %goto quit;
/* code that uses &input_ds */
...
%quit:
/* Code that cleans up whether or not any errors */
%mend extract_basex;
... View more