Hi Folks,
I have the following IML code in a large macro called %LARGE. Of course, there are other command lines within OOPS module. I want to exit IML and go to label "doit" if there is any error when executing IML. But it falied to execute %goto statement. Could anybody help? Thanks.
proc iml;
start; /* module will be named MAIN */
errcode = {" %if errors >= 0 %then %goto doit ; "} ;
call push (errcode);
errors = 0;
start oops; /* start module OOPS */
.......
.......
finish; /* finish OOPS */
run oops;
finish; /* finish MAIN */
errors= -1; /* disable */
quit;
An interesting question. I've never done it. You might try this (I don't know whether it will work):
1) Before PROC IML, use %LET IsError = 0;
2) In PROC IML, if there is an error CALL SYMPUT("IsError", "1"); and then ABORT;
3) After the PROC IML code, use a %IF statement to check the value of &IsError. If it is set, then %GOTO.
Have you looked at
http://communities.sas.com/message/37481#37481 ?
It is a slightly different problem, but related, and it includes a complete example that you can run. Also, it points out that the 'doit' label must be within the OOPS module.
Hi Rick.
Thanks for your reply. If it encounters errors, I want it %goto 'doit' label which is outside the IML procedure and skip other steps inside IML. Is there a nice way to do that? Thanks.
An interesting question. I've never done it. You might try this (I don't know whether it will work):
1) Before PROC IML, use %LET IsError = 0;
2) In PROC IML, if there is an error CALL SYMPUT("IsError", "1"); and then ABORT;
3) After the PROC IML code, use a %IF statement to check the value of &IsError. If it is set, then %GOTO.
Thanks, Rick!
Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.
Learn how to run multiple linear regression models with and without interactions, presented by SAS user Alex Chaplin.
Find more tutorials on the SAS Users YouTube channel.