具有varargs的FCMP无法正常工作



在研究FCMP以帮助回答另一个问题时,我对proc fcmp使用VARARGS选项的工作方式使我有些困惑,以便能够使用可变号来调用该函数论点。函数语句的SAS支持页面提供了以下示例,并明确指出示例暗示可以称为求和函数如下:sum = sumpation(1,2,2,3,4,5);。&quot

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:期望sumpation子例程呼叫的参数1的数组。

这让我感到困惑。我想念明显的东西吗?

第二个错误消息说该函数正在期望数组作为参数1.忘记了以下事实:在fcmp中以这种方式调用函数似乎有效,而SAS支持似乎表明这是这是全部要点这;期望一个数组确实可以长度不同,实际上与接受可变的参数并不相同,一个数组是一个参数

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

及以后:

注意:从数据步骤调用此功能时,您必须提供varargs作为数组。

http://documentation.sas.com/?docsetId=proc& docsettarget=n10vesIdZiklH1N1L7KIDQ4DQD0R.HTM&htm&ampsetversion = 9.4&

在这种情况下,请确保使用最新版本的文档。除非不幸的是,除非您遇到了9.2版。这对我有用 - 请注意,这也不是我期望它的工作方式...但是它确实如此:)。

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

只是根据您的评论澄清"提供一种方法来定义一个函数的方法是什么它是定义的吗?"。

fcmp可以使用inlib = proc选项或选项cmplib加载函数。由于FCMP知道如何调用varargs函数,您仍然可以使用该选项,仅来自其他Proc FCMP步骤或FCMP函数。

最新更新