我有一个if语句,用于检查全局变量是否为是/否
全局变量是前一个宏的输出
为什么当我在“Y”或“N”周围使用引号时它不起作用 - 我从未在任何其他编程语言中看到过这种情况。我总是不得不为字符变量使用引号
即。这不起作用
%if &errorflag='Y' %then %do;
但这有效:
%if &errorflag=Y %then %do;
答案 0 :(得分:5)
宏只是一个文本替换引擎。因此,&errorflag
中包含的值为Y
而不是'Y'
。显然是Y ^= 'Y'
。
这样可行
%if "&errorflag" = "Y" %then %do;
它用引号括起&errorflag
中的值。
%if "%upcase(&errorflag)" = "Y" %then %do;
可能是一个更安全的比较。