[英]How do I use a macro variable in WHERE statement to subset data by a string? (SAS 9.3)
[英]How do I invoke a macro variable inside the quoted string of a libname statement in 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;
我該怎么做對?
總是必須是前一年,或者是否要基於數據集中的值。 您不需要宏即可解決此問題。
去年最短的方法如下
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";
call symput
是你的朋友。 在創建變量srvyr2之后,將以下內容放入數據步驟:
call symput('srvyr_path', srvyr2);
然后在宏之外
libname stuff &srvyr_path;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.