%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
?
答案 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
位,因为我认为这可能让人感到困惑 - 这完全没必要。