我正在研究由我的老人为一个过程编写的SAS宏代码。我无法理解编写的代码。在其中一个宏代码中,它被写为
%macro1(macro2(pm1, pm2, pm3))
在此语句后%macro2
写了一些其他计算。
任何人都可以帮助我理解上面提到的代码的处理
答案 0 :(得分:1)
首先,确保您在StackOverflow上提交的语法是正确的 - 您有一个未闭合的括号,代码片段应如下所示:
%macro1(macro2(pm1, pm2, pm3))
您提供的代码很容易实现。
%macro t1(arg);
%put NOTE: t1;
%&arg.;
%mend t1;
%macro t2(arg2);
%put NOTE: t2;
%put NOTE: Arg 2 = &arg2.;
%mend t2;
%t1(t2(test));
输出:
NOTE: t1
NOTE: t2
NOTE: Arg 2 = test
基本上,您传递的是字符串,以调用内部宏作为外部宏的参数。您可以通过&符号符号引用内部宏。在上面的代码段中,我创建了两个宏, t1 宏引用了这样的参数:
%&arg.;
它解析为:
MLOGIC(T1): Beginning execution.
MLOGIC(T1): Parameter ARG has value t2(test)
MLOGIC(T1): %PUT NOTE: t1
SYMBOLGEN: Macro variable ARG resolves to t2(test)
MLOGIC(T2): Beginning execution.
MLOGIC(T2): Parameter ARG2 has value test
这允许代码正常运行 - 调用宏作为另一个宏的参数。