我已经理解并在其他程序中看到以下语法是正确的。
%let variable = 'something';
statement name "&variable\othertext"; // something\othertext
但是,在我编写的代码中,我收到以下错误消息:未解析表观符号引用。行LIBNAME REMOTE
%let month = 'JUN';
%let year = '18';
%let zos = ***********
signon zos ********************;
libname name "*********************************";
rsubmit;
libname remote "AAAA.BBBB.&month&year.SASLIB" access = readonly;
proc download inlib=remote outlib=name;
run;
libname remote clear;
endrsubmit;
signoff;
我想念什么?
答案 0 :(得分:2)
更多上下文会有所帮助,但很可能您不了解句号在解析宏变量(符号)引用中所扮演的角色。为了使您可以在宏变量引用旁边放置字母和数字,SAS需要一种方法来告知宏名称的结尾和纯文本的开头。为此使用了句点。
因此,如果您想生成此字符串
"AAAA.BBBB.JAN18.SASLIB"
从月份和年份值开始。首先,请确保将宏变量设置为您实际想要的文本。引号只是发给宏处理器的文本。
%let month=JAN ;
%let year= 18;
然后,当您用宏变量引用替换值时,在&YEAR之后需要一个额外的时间,以便实际生成一个。您可能应该养成在引用宏变量时总是添加句点的习惯。
"AAAA.BBBB.&month.&year..SASLIB"
答案 1 :(得分:2)
在您的本地会话中定义了MONTH
和YEAR
宏变量,但是您正在尝试在远程会话中解析它们。
使用%SYSRPUT
和%SYSLPUT
在会话之间分配宏变量。
/* Local to remote */ %LET MONTH = 12 ; %LET YEAR = 2018 ; %SYSLPUT MONTH = &MONTH ; %SYSLPUT YEAR = &YEAR ; rsubmit ; %PUT &MONTH &YEAR ; /* resolves 12 and 2018 respectively */ /* remote to local */ %SYSRPUT FOO = BAR ; endrsubmit ; %PUT &FOO ; /* resolves to BAR */