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

Parameterised SQL WHERE statement and SAS Macro Language problems

我有一段代码参数化了大约一百个相似但不完全相同的 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')  

...使用以下语法:

%if %eval(&inn_sel_var. ^= &comp_var2.) %then %do;

        &inn_sel_var.

%end;   

/&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、%NRQUOTE、%NRBQUOTE 和 %UNQUOTE,但我一直遇到错误。有人可以告诉我需要做什么才能正确输入参数化的 where 语句吗?

谢谢

您需要显示更多程序 and/or 日志。

但是使用 %superq() 应该可以防止在 %IF 语句中出现此类错误消息。

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

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