Hello,
In the below code I want the test macro to end if syserr is greater than 0 and run the msg macro. In this case the loop doesn't end when the syserr is greater than zero. It executes all the 3 macro parameter and then leaves the macro. I am trying to end it as soon as the syserr value becomes greater than zero and run the next macro msg. Any help is much appreciated.
%macro test(dsn);
Data &dsn.;
a = 1;
Run;
%Put syserr ====> &syserr.;
%if &syserr. ne 0 %then %return;
%mend test;
%test(abc);
%test(12ab);
%test(aa);
%macro msg;
%if &syserr. ne 0 %then %Put "ERROR";
%mend;
%msg;
Thanks!
Not sure what your intentions are, but why don't you just call %msg from %test?
Do also wish to stop the next call to test (aa)? If so, you may need to wrap the %test calls into another macro and do some kind %if logic around the calls.
%msg must be declared before you call %test.
I figured the solution. Thanks for your reply.
Hi,
i guess you got confused with the order of the macros.
Try it this way:
%macro msg;
%if &syserr. ne 0 %then %do;
%put syserr ====> &syserr.;
%put "ERROR";
%end;
%mend;
%macro test(dsn);
%if &syserr. ne 0 %then %return;
data &dsn.;
a = 1;
run;
%msg;
%mend test;
%test(abc);
%test(12ab);
%test(aa);
April 27 – 30 | Gaylord Texan | Grapevine, Texas
Walk in ready to learn. Walk out ready to deliver. This is the data and AI conference you can't afford to miss.
Register now and lock in 2025 pricing—just $495!
Still thinking about your presentation idea? The submission deadline has been extended to Friday, Nov. 14, at 11:59 p.m. ET.
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.