2016-12-20 190 views
0

我需要每次用新的變量集合多次創建4個變量的總和。對於例如A1 = sum(a1,a2,a3,a4),B1 = sum(b1,b2,b3,b4)&等等。所以,我正在嘗試編寫一個能夠幫助我輕鬆完成的宏。以下是代碼:SAS宏操作

%macro SUM2(VAR1,var2,var3,VAR4); 
data Subs_60_new; 
set Subs_60; 
substr(&var1,1,10)=sum(&var1,&var2,&var3,&var4); 
run; 
%mend sum2; 
options mprint mlogic;sum2(ADDITIONAL_INFO_Q1,ADDITIONAL_INFO_Q2,ADDITIONAL_INFO_Q3,ADDITIONAL_INFO_Q4); 

我使用SAS EG爲同一&當我運行宏,我得到了以下注釋:

NOTE: Writing TAGSETS.SASREPORT13(EGSR) Body file: EGSR 

&顯然,當我試圖執行它拋出宏一個錯誤。

有人可以幫我嗎?

回答

0

調用宏時,您需要與%符號先於宏的名稱,例如如下:

%macro SUM2(VAR1,var2,var3,VAR4); 
data Subs_60_new; 
set Subs_60; 
substr(&var1,1,10)=sum(&var1,&var2,&var3,&var4); 
run; 
%mend sum2; 
options mprint mlogic; 
%sum2(ADDITIONAL_INFO_Q1,ADDITIONAL_INFO_Q2,ADDITIONAL_INFO_Q3,ADDITIONAL_INFO_Q4); 

NOTE是無害的。一般來說,你應該關心的是ERROR s和WARNING

我想指出,這可能仍然會引發錯誤,因爲您試圖替換顯示爲應該包含數字字段(屬於sum函數的一部分)的變量(&var1)中的字符。鑑於你的描述你試圖達到什麼,我建議增加新的變量名稱作爲另一個宏參數 - 如下:

%macro SUM2(VAR1,var2,var3,VAR4,varname); 
data Subs_60_new; 
set Subs_60; 
&varname=sum(&var1,&var2,&var3,&var4); 
run; 
%mend sum2; 
options mprint mlogic; 
%sum2(ADDITIONAL_INFO_Q1,ADDITIONAL_INFO_Q2 
    ,ADDITIONAL_INFO_Q3,ADDITIONAL_INFO_Q4 
    ,MyNewVariable);