Yes, this can be tricky. I need to write a blog post about this (http://blogs.sas.com/iml), since several people have asked a similar question.
The issue, for those not familiar with calling Base SAS functions, is that some Base SAS functions string out their arguments in a list, whereas in SAS/IML it is convenient to be able to pass a vector of values.
The trick is to convert the vector of values into a comma-delimted string, and then stick the string into a macro variable by using the SYMPUT function. (This technique appears in my book Statistical Programming with SAS/IML Software: http://support.sas.com/publishing/authors/wicklin.html)
The following statements define a SAS/IML module called GetArgList that taks a vector of values and creates a comma-delimited string from it. You can then stick that string into the macro &myArgs, and use it in the FINANCE function:
proc iml;
start GetArgList(v);
/* convert numeric elements to a single string */
y = strip(putn(rowvec(v),"BEST12.")) + ",";
/* get rid of last comma */
y[ncol(y)] = strip(putn(v[ncol(y)],"BEST12."));
return( rowcat(y) ); /* scalar string */
finish;
use test;
read all var _ALL_ into values;
call symput("myArgs", GetArgList(values));
r = finance('xirr', &myArgs, 0.1);
print r;
... View more