SAS:不能为宏引用解析表观符号引用

时间:2018-07-03 15:45:07

标签: sas

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

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

我想念什么?

2 个答案:

答案 0 :(得分:2)

更多上下文会有所帮助,但很可能您不了解句号在解析宏变量(符号)引用中所扮演的角色。为了使您可以在宏变量引用旁边放置字母和数字,SAS需要一种方法来告知宏名称的结尾和纯文本的开头。为此使用了句点。

因此,如果您想生成此字符串

"AAAA.BBBB.JAN18.SASLIB"

从月份和年份值开始。首先,请确保将宏变量设置为您实际想要的文本。引号只是发给宏处理器的文本。

%let month=JAN ;
%let year= 18;

然后,当您用宏变量引用替换值时,在&YEAR之后需要一个额外的时间,以便实际生成一个。您可能应该养成在引用宏变量时总是添加句点的习惯。

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

答案 1 :(得分:2)

在您的本地会话中定义了MONTHYEAR宏变量,但是您正在尝试在远程会话中解析它们。

使用%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 */