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