2013-12-11 137 views
0

我有SAS問題。更確切地說,調用另一個宏內部的宏。這裏是例子。SAS - 宏調用另一個宏

data TEST_1; 
    do i = 1 to 100; 
    a=i**2; 
    output; 
end; 
run; 

data TEST_2; 
    do i = 1 to 100; 
    b=i**3; 
    output; 
end; 
run; 

%macro macro_in(file_a); 

data result1; 
set &file_a; 
    c=a+1; 
run; 

%mend; 

%macro_in(TEST_1); 

%macro macro_out(file_b); 

data result2; 
set &file_b._2; 
    d=a-1; 
run; 

data _null_; 
    do i = 1 to 2; 
    call execute(COMPRESS('%macro_in(' || &file_b || '_' || i || ')')); 
    output; 
    end; 
run; 

%mend; 

%macro_out(TEST); 

首先宏工作完全正常,但是存在與可變FILE_B我第二宏(代碼不能用它作爲參數傳遞給所述內宏)一個小問題。謝謝你的幫助!

+0

僅供參考,這是一個很好的做法,總是提到你在'%宏已經上市的宏名'也在'%修補' – 2013-12-11 14:36:43

回答

2

當調用從macro_outmacro_in你不需要datastep,您可以使用宏語言:

%macro macro_out(file_b); 

    data result2; 
    set &file_b._2; 
     d=a-1; 
    run; 

    %do i = 1 %to 2; 
     %macro_in(&file_b._&i); 
    %end; 

%mend; 
+0

謝謝你這麼多! – user2280549