我有一个可以进行大量计算的宏。 需要对 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(你好世界));
如果您想传递宏 CODE 作为输入,请保护它。您可以使用实际报价。
%mactwo('%macone()')
然后在 MACTWO 内部您可以删除它们。
%sysfunc(dequote(&callmac))
或者您可以假设输入是宏调用,因此不必费心尝试将 % 作为所传递值的一部分传递。
%mactwo(macone())
然后,当您使用外部宏中的值时,您可以添加 % 以触发宏处理器。
%&callmac