在研究 FCMP 以帮助回答这里的另一个问题时,我对proc fcmp
使用该VARARGS
选项时的工作原理感到有些困惑,以便能够使用可变数量的参数调用该函数。FUNCTION 语句的 sas 支持页面提供了以下示例,并明确指出“该示例暗示求和函数可以调用如下:sum = summation(1, 2, 3, 4, 5);。”
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:求和函数调用的参数太多。
错误 707-185:求和子例程调用的参数 1 需要数组。
这让我很困惑。我错过了一些明显的东西吗?
第二条错误消息说该函数需要一个数组作为参数 1。忘记了在fcmp
proc 中以这种方式调用该函数似乎有效并且 SAS 支持似乎表明这就是重点的事实;期望一个确实可以具有不同长度的数组实际上与接受可变数量的参数不同,数组是一个参数