2016-09-12 58 views
0

我正在调查由我的高级编写的一个SAS宏代码进程。我无法理解所写的代码。在宏代码的一个它这个说法%macro2与其他一些计算写入后写成了解SAS宏代码

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

任何一个可以帮助我理解上述

回答

1

首先提到的代码的处理,确保你的语法,您在计算器上提交是正确的 - 你有一个未封闭的括号和代码段应如下像这样:

%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 

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