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

I want to pass the name of a function to another function as an argument in IML.  Is this possible? I'm running V9.4

 

proc iml;

   start try1(x,y);
   return(x+y);
   finish;

   start try2(x,y);
   return (x*y);
   finish;

   start calc(x,y,func);
   return ( func(x,y) );
   finish;

  x=2; y=3;
  a = calc(x,y,"try1"); print a;
  b = calc(x,y,"try2"); print b;

quit;
1 ACCEPTED SOLUTION

Accepted Solutions
_bc_
Calcite | Level 5

Yes, I see.  I did not know of either of these two strategies.  Perfectly clear answer with your examples.  Thanks very much for the information.  A great help.

View solution in original post

3 REPLIES 3
Rick_SAS
SAS Super FREQ

Maybe. It depends what you are trying to do. Look at the APPLY function, which solves your trivial example. 

 

proc iml;
   start try1(x,y);
   return(x+y);
   finish;

   start try2(x,y);
   return (x*y);
   finish;

  x=2; y=3;
  a = apply("try1", x,y); print a;
  b = apply("try2", x,y); print b;
Rick_SAS
SAS Super FREQ

I guess the general answer is that you can build the function call as a text string and then use CALL EXECUTE to call the function:

 

start calc(x,y,func);
   z = .;
   cmd = "z = " + func + "(x,y);";
   call execute( cmd );
   return z;
finish;

x=2; y=3;
a = calc(x,y,"try1"); print a;
b = calc(x,y,"try2"); print b;
_bc_
Calcite | Level 5

Yes, I see.  I did not know of either of these two strategies.  Perfectly clear answer with your examples.  Thanks very much for the information.  A great help.

sas-innovate-white.png

Register Today!

Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9.

 

Early bird rate extended! Save $200 when you sign up by March 31.

Register now!

From The DO Loop
Want more? Visit our blog for more articles like these.
Discussion stats
  • 3 replies
  • 1424 views
  • 3 likes
  • 2 in conversation