VARARGS的FCMP无法按预期工作?

时间:2017-11-27 14:39:10

标签: sas fcmp

在研究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支持似乎表明这是这一点的全部意义;期望一个数组,实际上可以是不同长度,实际上不同于接受可变数量的参数,数组是一个参数

1 个答案:

答案 0 :(得分:3)

  

如果指定VARARGS,则函数中的最后一个参数必须是数组。

后来:

  

注意:从DATA步骤调用此函数时,必须将VARARGS作为数组提供。

http://documentation.sas.com/?docsetId=proc&docsetTarget=n10vesidziklh1n1l7kidq4dqd0r.htm&docsetVersion=9.4&locale=en

请确保使用最新版本的文档,在本例中为9.4。除非您碰巧遇到版本9.2。 这对我有用 - 请注意,这并不是我预期它的工作原理......但确实如此:)。

data demo;
    array test(4) (1, 2, 3, 4);
    check = summation(test);
    put check=;
run;