在PROC SQL中解析宏变量

时间:2017-06-05 15:18:44

标签: sas

我有一个需要在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'中进行硬编码,则可以正常使用。我错过了鼻子下的东西吗?任何人都可以帮我一把吗?

感谢!!!

2 个答案:

答案 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'))
... ) ...