2016-12-20 95 views
0

我需要從sas數據集t_final_Summary生成報告。當我使用
proc報告或proc列表我不會得到行那些列
沒有他們的價值。因此,我創建了一個新的數據集,名稱爲Expiring
,其中的列與報告中的列相同。無法將傳遞給宏的參數作爲宏變量來解析

t_final_Summary具有名爲 - Sub_LOB,Group,Mat_Month和Comm_Incl的列。 我試圖將宏從該表中的值傳遞到另一個表
名爲Expiring,其中列名爲Sub_LOB,Group,Sum_of_Comm_Incl
不同Mat_month。我寫了下面的代碼:

%macro mat (sub,grp,mth,MCRO); 
    proc sql no print; 
    select case 
      when Sum(Comm_incl)=. then 0 
      else sum(Comm_Incl) 
      end format=16.2 
     into :&MCRO. 
     from t_final_Summary 
    where Sub_LOB= "&sub." 
      and Group="&grp." 
      and Mat_Month="&mth."; 
    quit; 
%mend mat; 

%mat(CRE Commercial, Carolina Group, _Expired, goid); 

/*Now I want to check my macro variable goid using %put*/ 
%put &goid; 

然後日誌總是告訴我,宏goid沒有解決。宏語句中是否有任何
錯誤。 我想不通。任何人都可以幫助我嗎?

+0

你嘗試PRELOADFMT的建議? – Reeza

+0

宏變量範圍 - 變量死亡不存在於宏之外。在這個問題的兩個方面肯定都是重複的。 – Reeza

+0

可能重複[如何在宏中創建一個宏變量?](http://stackoverflow.com/questions/38361696/how-to-create-a-macro-variable-within-a-macro) – Reeza

回答

0

由於您的宏的其餘部分看起來是正確的,我只解決如何獲取參數來解析宏變量。在將宏傳遞給宏之前,宏變量需要全局化。

代碼:

%Macro Testit(received_var); 

Proc sql noprint; 
    Select make into :&received_var from sashelp.cars where make="Acura"; 
Quit; 

%Put Received_Var(Local): &&&received_var; 

%mend; 

%Global Passed_Var; 
%Testit(passed_var); 

%Put Passed_Var(Global) : &passed_var; 

登錄:

24    %Macro Testit(received_var); 
25   
26    Proc sql noprint; 
27    Select make into :&received_var from sashelp.cars where Make="Acura"; 
28    Quit; 
29   
30    %Put Received_Var(Local): &&&received_var; 
31   
32    %mend; 
33   
34    %Global Passed_Var; 
35    %Testit(passed_var); 
NOTE: PROCEDURE SQL used (Total process time): 
     real time   0.00 seconds 
     cpu time   0.00 seconds 


Received_Var(Local): Acura 
36   
37    %Put Passed_Var(Global) : &passed_var; 
Passed_Var(Global) : Acura 
+0

是的,你是對的。在將宏傳遞給proc sql中的宏之前,該宏應該是全局的。非常感謝您的幫助 – shankar