DATA Step, Macro, Functions and more

How to exit macro loop?

Reply
Contributor
Posts: 71

How to exit macro loop?

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!

Super User
Posts: 5,437

Re: How to exit macro loop?

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.

Data never sleeps
Contributor
Posts: 71

Re: How to exit macro loop?

I figured the solution. Thanks for your reply.

Occasional Contributor
Posts: 10

Re: How to exit macro loop?

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);

Ask a Question
Discussion stats
  • 3 replies
  • 718 views
  • 3 likes
  • 3 in conversation