我有一个需要在PROC SQL中使用的宏变量。它解析的方式似乎有完美的语法,但我收到语法错误,我不知道为什么;
%let test = mytext;
PROC SQL;
CREATE TABLE myTalbe&test AS
SELECT DISTINCT
a.column
FROM
tablename a
WHERE
a.column = %bquote('&test')
;QUIT;
我得到的错误在解析后的文字'mytext'下面会出现一条红线,并说
错误22-322:语法错误,期望以下之一:名称,a 引用字符串,数字常量,日期时间常数, 缺失值,(,*,+, - ,ALL,ANY,BTRIM,CALCULATED,CASE,INPUT,PUT,SELECT,SOME,SUBSTRING,TRANSLATE, USER。
我不认为此错误适用于此处。如果我在'mytext'中进行硬编码,则可以正常使用。我错过了鼻子下的东西吗?任何人都可以帮我一把吗?
感谢!!!
答案 0 :(得分:2)
BQUOTE函数尝试在执行时立即解析该值。尝试删除它并使用双引号代替:
%let test = mytext;
PROC SQL;
CREATE TABLE myTalbe&test AS
SELECT DISTINCT
a.column
FROM
tablename a
WHERE
a.column = "&test"
;QUIT;
答案 1 :(得分:2)
宏引用令SAS解析器感到困惑。对于这个程序,我将删除%bquote()
的使用,只使用双引号而不是单引号,以便宏变量引用将解析。
WHERE a.column = "&test"
如果您实际上正在通过SQL生成一个需要对字符串文字使用单引号的系统,那么您需要使用%unquote()
来删除宏引用。
... from connection to ... ( ...
WHERE a.column = %unquote(%bquote('&test'))
... ) ...