【发布时间】:2013-06-26 19:10:20
【问题描述】:
我正在尝试使用 PROC SQL 和现有宏变量的值将一行插入 SAS 数据集中,但我收到标准语法错误消息。下面是一个失败的代码示例:
%let viewname=MKTVIEWS.imei_ref;
%let xrc=0;
%let xmsg= ;
proc sql;
create table results (viewname char(40), xrc numeric, xmsg char(200));
insert into results (viewname, xrc, xmsg)
values ( %str(%')&viewname%str(%')
, &xrc
, %str(%')%superq(xmsg)%str(%') );
quit;
这是错误信息:
ERROR 22-322: Syntax error, expecting one of the following: a quoted string,
a numeric constant, a datetime constant, a missing value, +, -, MISSING, NULL,
USER.
在没有两个字符宏变量的情况下运行程序可以正常工作:
proc sql;
create table results (viewname char(40), xrc numeric, xmsg char(200));
insert into results (viewname, xrc, xmsg)
values ( 'MKTVIEWS.imei_ref'
, &xrc
, '' );
quit;
很明显,我缺少有关宏引用或类似内容的内容。我什至尝试使用临时宏变量而不是嵌入那些 %STR 调用来创建带引号的字符串,但这也不起作用。
【问题讨论】:
-
有时我注意到 SAS 会被宏引用函数的有效使用绊倒。发生这种情况时,将麻烦的代码包装在
%unquote()中将允许解析器继续。