参数化SQL WHERE语句和SAS宏语言问题

参数化SQL WHERE语句和SAS宏语言问题,sql,sas,sas-macro,Sql,Sas,Sas Macro,我有一段代码,它参数化了大约一百个相似但不完全相同的SQL语句,以生成所需的数据。除了where语句外,参数化工作正常。我正在传递以下格式的宏字符串: where PERIOD_LAST_DTTM = '31DEC2017:23:59:59'dt and myvar1 = 1 and myvar2 < 0 and myvar3 in ('SOME STRING', 'SOME OTHER STRING') /&inn_sel_var是字符串&comp_var2=NULL的位置

我有一段代码,它参数化了大约一百个相似但不完全相同的SQL语句,以生成所需的数据。除了where语句外,参数化工作正常。我正在传递以下格式的宏字符串:

where PERIOD_LAST_DTTM = '31DEC2017:23:59:59'dt
  and myvar1 = 1 and myvar2 < 0
  and myvar3 in ('SOME STRING', 'SOME OTHER STRING')  
/&inn_sel_var是字符串&comp_var2=NULL的位置/

…但我收到以下错误:

ERROR: A character operand was found in the %EVAL function or %IF condition where a numeric operand is required. The condition was: 
       where PERIOD_LAST_DTTM = '31DEC2017:23:59:59'dt and myvar1 = 1 and myvar2 < 0 and myvar3 in ('SOME STRING', 'SOME OTHER STRING')                                                                                    


             ^= NULL 
ERROR: %EVAL function has no expression to evaluate, or %IF statement has no condition.
ERROR: The macro MODEL_CHECKS will stop executing.
…我尝试过使用%STR、%SUPERQ、%QUOTE、%BQUOTE、%nquote、%NRBQUOTE和%UNQUOTE,但我一直遇到错误。有人能告诉我需要做什么才能正确输入我的参数化where语句吗


谢谢

您需要显示更多的程序和/或日志

但是使用%superq应该可以防止在%IF语句中出现这种类型的错误消息

%if %superq(inn_sel_var) ne %superq(comp_var2) %then &inn_sel_var. ;

当然,INN_SEL_VAR宏变量的值可能仍然会在生成的SAS代码中产生错误。

调试这种性质的宏问题需要充分了解正在使用的宏变量。当选项mtrace mprint时,是否可以发布一些日志;你在吗?另外,%if执行隐式%eval,如果仅删除令牌$eval,是否会发生相同的错误?您能显示宏声明和调用吗?您能否显示在宏声明和宏调用中使用宏引用函数进行的实际尝试?当其中一个宏变量包含WHERE语句/子句时,为什么这两个宏变量的值相同?您只是想测试两个where子句是否使用完全相同的字符?请使用选项mlogic symbolgen查看更多信息…您好,感谢您的回复。好的,这似乎现在起作用了。我在%superq中引用的宏变量的开头使用了一个符号,而您没有。我不确定为什么/如何不在此处使用符号…%superq使用要引用的宏变量的名称。如果宏变量包含要引用的宏变量的名称,则只能使用&确定。%superq能否屏蔽日志中的错误?我在EG会话中收到一个红色的“x”,表示发生了错误,但在日志中看不到“error:”或任何带红色下划线的文本。宏引用错误可能会对SAS会话造成严重破坏。重新初始化您的SAS会话,或者如果您不知道如何重新启动。
%if %superq(inn_sel_var) ne %superq(comp_var2) %then &inn_sel_var. ;