了解SAS宏代码

时间:2016-09-12 13:12:22

标签: statistics sas

我正在研究由我的老人为一个过程编写的SAS宏代码。我无法理解编写的代码。在其中一个宏代码中,它被写为

%macro1(macro2(pm1, pm2, pm3))

在此语句后%macro2写了一些其他计算。

任何人都可以帮助我理解上面提到的代码的处理

1 个答案:

答案 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

这允许代码正常运行 - 调用宏作为另一个宏的参数。