BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
richard_hu2003
Fluorite | Level 6

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;

1 ACCEPTED SOLUTION

Accepted Solutions
Rick_SAS
SAS Super FREQ

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.

View solution in original post

4 REPLIES 4
Rick_SAS
SAS Super FREQ

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.

richard_hu2003
Fluorite | Level 6

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.

Rick_SAS
SAS Super FREQ

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.

richard_hu2003
Fluorite | Level 6

Thanks, Rick!