Как вызвать макро-переменную внутри строки в кавычках оператора libname в SAS - PullRequest
2 голосов
/ 09 марта 2011

У меня есть имя библиотеки, которое меняется из года в год, и я хотел создать программу, которая автоматически подстраивается под это. Но чтобы все работало, мне нужно вызвать макрос внутри строки в кавычках в выражении 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 ]

4 голосов
/ 09 марта 2011

Всегда должен быть предыдущий год или вы хотите основывать его на значении в наборе данных.Вам не нужен макрос, чтобы решить это.

Самый короткий способ получить в прошлом году следующий:

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";
2 голосов
/ 09 марта 2011

call symput твой друг.После создания переменной srvyr2 поместите в шаг данных следующее:

...