SAS:宏引用的表观符号引用未解析

SAS:宏引用的表观符号引用未解析,sas,Sas,我已经理解,并在其他程序中看到,以下语法是正确的 %let variable = 'something'; statement name "&variable\othertext"; // something\othertext 然而,在我编写的代码中,我得到了这样一条错误消息:未解析明显的符号引用。对于行LIBNAME REMOTE %let month = 'JUN'; %let year = '18'; %let z

我已经理解,并在其他程序中看到,以下语法是正确的

%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;

我遗漏了什么?

更多的上下文可能会有所帮助,但很可能您不了解句点在解析宏变量符号引用中所起的作用。要允许您在宏变量引用旁边放置字母和数字,SAS需要一种方法来告诉宏的名称从何处结束,纯文本从何处开始。句号用于此

所以如果你想生成这个字符串

"AAAA.BBBB.JAN18.SASLIB"
从月份和年份值。首先确保将宏变量设置为实际需要的文本。引号只是宏处理器的文本

%let month=JAN ;
%let year= 18;
然后,当您使用宏变量引用替换这些值时,您将需要在年之后额外的一段时间,以便实际生成一个周期。您可能应该养成在引用宏变量时总是添加句点的习惯

"AAAA.BBBB.&month.&year..SASLIB"

更多的上下文可能会有所帮助,但很可能您不了解句点在解析宏变量符号引用中所起的作用。要允许您在宏变量引用旁边放置字母和数字,SAS需要一种方法来告诉宏的名称从何处结束,纯文本从何处开始。句号用于此

所以如果你想生成这个字符串

"AAAA.BBBB.JAN18.SASLIB"
从月份和年份值。首先确保将宏变量设置为实际需要的文本。引号只是宏处理器的文本

%let month=JAN ;
%let year= 18;
然后,当您使用宏变量引用替换这些值时,您将需要在年之后额外的一段时间,以便实际生成一个周期。您可能应该养成在引用宏变量时总是添加句点的习惯

"AAAA.BBBB.&month.&year..SASLIB"
月份和年份宏变量是在本地会话中定义的,而您正试图在远程会话中解析它们

使用%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 */ 月份和年份宏变量是在本地会话中定义的,而您正试图在远程会话中解析它们

使用%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 */
在综合了克里斯J.和汤姆的答案后,剧本开始运作了!在综合了克里斯J.和汤姆的答案后,剧本开始运作了!