如果我想在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”。 我希望我已经说清楚了。任何意见和评论都表示赞赏。
答案 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