参数化 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 代码中产生错误。
我有一段代码参数化了大约一百个相似但不完全相同的 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 代码中产生错误。