%syscall - 使用text变量作为参数列表

时间:2015-04-13 16:33:02

标签: sas

%macro comb(n,k);
    %do i=1 %to &n;
        %let x&i = &i;
    %end;
    %let variables = x1;
    %do i=2 %to &n;
        %let variables = %str(&variables, x&i);
    %end;
    %let ncomb=%sysfunc(comb(&n,&k));
    %do j=1 %to &ncomb;
        %syscall allcomb(j, k, variables);
        %put &x1 &x2;;
    %end;
%mend;

当我运行%comb(3,2);时,我得到:

WARNING: Argument 2 to function ALLCOMB referenced by the %SYSFUNC or %QSYSFUNC macro function is
         out of range.

&variables展开到x1, x2, x3,当我将代码更改为%syscall allcomb(j, k, x1, x2, x3);时,它可以正常工作。是否可以按照我尝试这样做的方式将最后一个参数传递给allcomb

1 个答案:

答案 0 :(得分:1)

所以,我让这个在这里工作:

%macro comb(n,k);
    %do i=1 %to &n;
        %let x&i = &i;
    %end;
    %let variables = x1;
    %do i=2 %to &n;
        %let variables = &variables, x&i;
        %put &=variables;
    %end;
    %let ncomb=%sysfunc(comb(&n,&k));
    %put &=ncomb &=k;
    %do j=1 %to 3;
        %syscall allcomb(j, k, &variables);
        %put &x1 &x2;
    %end;
%mend;

%comb(3,2);

这等于为变量添加额外的&。我还删除了%str位,因为我认为这可能让人感到困惑 - 这完全没必要。