2016-09-12 65 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 

並允許代碼正常運行 - 調用宏作爲另一個宏的參數。