在另一个宏的宏参数内调用一个宏

问题描述 投票:0回答:1

我有一个可以进行大量计算的宏。 需要对 do 循环中的许多变量重复该宏。 下面是一个模型(因为实际的宏太长)。 在下面的示例中,%macone 是执行所有计算的宏。这个宏 需要作为 %mactwo 的参数调用。 我希望能够调用 mactwo 并能够使用 macone 修改参数。

%macro macone(val=);
 %put &val;
%mend macone;



%let lista=vara varb;
%let listb=varc vard;

%macro mactwo(callmac);
    %let n = %sysfunc(countw(&lista));
    %let v = %sysfunc(countw(&listb));
    %do c=1 %to &n;
        %let nlist = %scan(&lista , &c);
        %do p=1 %to &v;
            %let npop = %scan(&listb , &p);
         &callmac;
        %end;
    %end;
%mend mactwo;

%mactwo(%macone(你好世界));

sas macros
1个回答
0
投票

如果您想传递宏 CODE 作为输入,请保护它。您可以使用实际报价。

%mactwo('%macone()')

然后在 MACTWO 内部您可以删除它们。

%sysfunc(dequote(&callmac))

或者您可以假设输入是宏调用,因此不必费心尝试将 % 作为所传递值的一部分传递。

%mactwo(macone())

然后,当您使用外部宏中的值时,您可以添加 % 以触发宏处理器。

 %&callmac
© www.soinside.com 2019 - 2024. All rights reserved.