SAS在字符的条件比较中使用全局变量

she*_*ode 1 sas sas-macro

我有一个if语句,检查全局变量是否为是/否

全局变量是前一个宏的输出

为什么当我在"Y"或"N"周围使用引号时它不起作用 - 我从未在任何其他编程语言中看到过这种情况.我总是不得不为字符变量使用引号

即这不起作用

%if &errorflag='Y' %then %do;
Run Code Online (Sandbox Code Playgroud)

但这有效:

%if &errorflag=Y %then %do;
Run Code Online (Sandbox Code Playgroud)

Dom*_*azz 5

宏只是一个文本替换引擎.所以包含的值&errorflagY和不是'Y'.显然Y ^= 'Y'.

这会奏效

%if "&errorflag" = "Y" %then %do;
Run Code Online (Sandbox Code Playgroud)

&errorflag用引号括起来.

%if "%upcase(&errorflag)" = "Y" %then %do;
Run Code Online (Sandbox Code Playgroud)

可能是一个更安全的比较.