如何在SAS中的libname语句的引用字符串中调用宏变量

时间:2011-03-09 01:07:50

标签: sas

我有一个每年不同的libname,我想制作一个自动调整的程序。但为了使一切工作,我必须在libname语句中调用引用字符串中的宏。我该怎么做?

%macro srvyr;

data work.whatever;

length srvyr $4.;

srvyr = (left(year(date()))-1);


srvyr2 = "'C:\Documents and Settings\user\Desktop\sas\d"||srvyr||"a1'";


run;

%mend;

%srvyr;  

/*Everything above sets configures the pathname the way I need it*/

我想运行这个:

libname stuff &srvyr;run;

好像是

libname stuff 'C:\Documents and Settings\user\Desktop\sas\d2010a1';
run;

我该怎么做?

2 个答案:

答案 0 :(得分:4)

是否始终必须是前一年,或者您是否希望将其基于数据集中的值。你不需要宏来解决这个问题。

去年获得的最短方法如下

libname stuff "C:\Documents and Settings\user\Desktop\sas\d%eval(%sysfunc(year(%sysfunc(date())))-1)a1";

如果你想分解它以使其更具可读性,它可能就像这样

%let lastyear = %eval(%sysfunc(year(%sysfunc(date())))-1);
%let libpath = C:\Documents and Settings\user\Desktop\sas\d&lastyear.a1;

libname stuff "&libpath";

答案 1 :(得分:2)

call symput是你的朋友。在创建变量srvyr2后,将以下内容放入数据步骤中:

call symput('srvyr_path', srvyr2);

然后在宏之外,

libname stuff &srvyr_path;