在研究FCMP以帮助回答这里的另一个问题时,我在使用proc fcmp
选项时VARARGS
的工作方式让我感到有点困惑,以便能够使用可变数字调用该函数论点。 The sas support page for the FUNCTION statement提供了以下示例,并明确指出"该示例意味着可以按如下方式调用求和函数:sum = summation(1,2,3,4,5);。& #34;
options cmplib=sasuser.funcs;
proc fcmp outlib=sasuser.funcs.temp;
function summation (b[*]) varargs;
total = 0;
do i = 1 to dim(b);
total = total + b[i];
end;
return(total);
endsub;
sum=summation(1,2,3,4,5);
put sum=;
run;
运行它似乎运行良好并生成一个显示sum=15
的输出报告,这似乎表明将函数调用为summation(1,2,3,4,5)
可以正常工作。
但是,如果我尝试在数据步骤中以相同的方式使用该功能
data _null_;
test=summation(1,2,3,4,5);
run;
我在日志中收到错误
错误72-185:求和函数调用有太多参数。
ERROR 707-185:期望求和子程序调用的参数1的数组。
这让我很困惑。我错过了一些明显的东西吗?
第二个错误消息说该函数期望一个数组作为参数1.忘记在fcmp
proc中以这种方式调用函数似乎工作的事实,并且SAS支持似乎表明这是这一点的全部意义;期望一个数组,实际上可以是不同长度,实际上不同于接受可变数量的参数,数组是一个参数
答案 0 :(得分:3)
如果指定VARARGS,则函数中的最后一个参数必须是数组。
后来:
注意:从DATA步骤调用此函数时,必须将VARARGS作为数组提供。
请确保使用最新版本的文档,在本例中为9.4。除非您碰巧遇到版本9.2。 这对我有用 - 请注意,这并不是我预期它的工作原理......但确实如此:)。
data demo;
array test(4) (1, 2, 3, 4);
check = summation(test);
put check=;
run;