从libname调用一个宏变量

时间:2015-03-06 02:32:25

标签: sas sas-macro

如果我想在libname中使用它,如何调用proc sql的from子句中的宏变量? 让我告诉你我的意思:

options nofmterr;
libname FRST "/ecm/retail/mortgage/nbk6kra/LGD/data/frst_201312bkts";
libname HELN "/ecm/retail/mortgage/nbk6kra/LGD/data/heln_201312bkts";
libname HELC "/ecm/retail/mortgage/nbk6kra/LGD/data/helc_201312bkts";

%let pathLGD = /new/mortgage/2014Q4/LGD;
%let prod = FRST; 

/**************** Segment calculation **************** Date filter to be consistent with model documentation for segmented tables****************/

%macro Performance(prod);

proc sql;
create table lgd_seg_&prod as 
select distinct
SegDT_LGD_2013,
min(ScoreDT_LGD_2013) as min_range,
max(ScoreDT_LGD_2013) as max_range,
count(*) as count,
mean(lgd_ncl_adjusted) as LGD_actual, 
mean(ScorePIT_LGD_2013) as LGD_pred_pit_1, 
mean(ScoreDT_LGD_2013) as LGD_pred_dt_1
from "&prod."scored;
where coh_asof_yyyymm > 200612
group by 1;
quit;

PROC EXPORT DATA=lgd_seg_&prod._fs
                OUTFILE= "&pathLGD./lgd_seg.xlsx" 
                DBMS=XLSX REPLACE;
         SHEET="&prod._lgd_seg_fs"; 
    RUN;

%mend;

%Performance(prod=FRST);        
%Performance(prod=HELN);        
%Performance(prod=HELC);

因此在“from”子句中,宏应该分别读取FRST.scored,HELN.scored和HELC.scored。目前它无法找到该文件,如果我要删除引号,那么它将变为“work.FRSTscored”。 我希望我已经说清楚了。任何意见和评论都表示赞赏。

2 个答案:

答案 0 :(得分:1)

如果要跟随具有直接附加字符的宏变量的已解析值,则应使用句点(.)转义宏变量。例如:

%let start = one;
%put &start.two;
%put &start..two;
%put &startend;
  

ONETWO
  one.two
  警告:尚未解析明显的符号引用STARTEND。

因此,您的代码应为from &prod..scored;


如果您需要,还可以使用双&符号(&&)延迟宏变量的分辨率:

%let end = two;
%let onetwo = three;
%put &&one&end;
%put &&&start&end;
  

三个
  三

或者:

%let three = inception;
%put &&&&&&&start&end;
  

开始

答案 1 :(得分:0)

删除在宏变量prod之外应用的引号,并在宏变量之后使用两个点(一个用于表示宏变量名的结尾,另一个用于指定libname引用之后的表名。

from &prod..scored