Sas 解析PROC SQL中的宏变量

Sas 解析PROC SQL中的宏变量,sas,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',并

我有一个宏变量需要在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:语法错误,应为以下内容之一:名称 带引号的字符串、数字常量、日期时间常量、, 缺少的值,(,*,+,-,ALL,ANY,BTRIM,computed,CASE,INPUT,PUT,SELECT,SOME,SUBSTRING,TRANSLATE, 用户

我觉得这个错误不适用于这里。如果我在'mytext'中硬编码,它工作得很好。我是不是漏掉了什么?有人能帮我一下吗


谢谢!!!

BQUOTE函数在执行时会立即尝试解析该值。请尝试将其删除并使用双引号:

%let test = mytext;
PROC SQL;
CREATE TABLE myTalbe&test AS
SELECT DISTINCT
    a.column
FROM
    tablename a
WHERE
    a.column = "&test"
;QUIT;

宏引号混淆了SAS解析器。对于此程序,我将删除使用
%bquote()
,只使用双引号而不是单引号,这样宏变量引用将解析

WHERE a.column = "&test"
如果您正在向需要对字符串文字使用单引号的系统生成直通SQL,则需要使用
%unquote()
删除宏引号

... from connection to ... ( ...
WHERE a.column = %unquote(%bquote('&test'))
... ) ...

这会产生相同的错误,这次用双引号显示我想要的输出注:行由宏函数“BQUOTE”生成。77“mytext”这显示在错误道歉之前是的-
bquote
是一个有趣的问题!回答更新我会发誓我已经这么做了,但它不起作用。使用双引号似乎给了我想要的输出。谢谢,Allan。我们不鼓励使用标记,除非你询问EG功能(与SAS语言功能相反)。当我通过时,我总是使用%bquote,不会失败。我会发誓在发布此问题之前,我先尝试了双引号,但我遇到了问题。不过我必须把它交给Allan,因为他先回答了!谢谢,Tom!