## In IML, is it possible to pass a function name as argument to other functions?

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

## Re: In IML, is it possible to pass a function name as argument to other functions?

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.

3 REPLIES 3

## Re: In IML, is it possible to pass a function name as argument to other functions?

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

## Re: In IML, is it possible to pass a function name as argument to other functions?

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

## Re: In IML, is it possible to pass a function name as argument to other functions?

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.

From The DO Loop