无法将参数传递给宏以作为宏变量解析

时间:2016-12-20 02:07:34

标签: sql macros sas

我需要从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没有解决。有没有 宏语句中的错误。 我弄清楚了。有人可以帮帮我吗?

1 个答案:

答案 0 :(得分: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