Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SAS在字符条件比较中使用全局变量_Sas_Sas Macro - Fatal编程技术网

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

SAS在字符条件比较中使用全局变量,sas,sas-macro,Sas,Sas Macro,我有一个if语句来检查全局变量是否为yes/no 全局变量是上一个宏的输出 为什么我在“Y”或“N”周围使用引号?它不起作用-我从未在任何其他编程语言中看到过这一点。我总是不得不对字符变量使用引号 i、 这是行不通的 %if &errorflag='Y' %then %do; 但这是可行的: %if &errorflag=Y %then %do; 宏只是一个文本替换引擎。因此&errorflag中包含的值是Y,而不是'Y'。显然Y^='Y' 这会管用的 %if "&e

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

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

为什么我在“Y”或“N”周围使用引号?它不起作用-我从未在任何其他编程语言中看到过这一点。我总是不得不对字符变量使用引号

i、 这是行不通的

%if &errorflag='Y' %then %do;
但这是可行的:

%if &errorflag=Y %then %do;

宏只是一个文本替换引擎。因此
&errorflag
中包含的值是
Y
,而不是
'Y'
。显然
Y^='Y'

这会管用的

%if "&errorflag" = "Y" %then %do;
它将
&errorflag
中的值括在引号中

%if "%upcase(&errorflag)" = "Y" %then %do;

也许比较安全

宏只是一个文本替换引擎。因此
&errorflag
中包含的值是
Y
,而不是
'Y'
。显然
Y^='Y'

这会管用的

%if "&errorflag" = "Y" %then %do;
它将
&errorflag
中的值括在引号中

%if "%upcase(&errorflag)" = "Y" %then %do;

也许比较安全

我明白了。我认为我没有正确理解宏变量,我假设它是一个对象存储。思考宏的最佳方式是它们提供了一种为您编写SAS代码的方法。宏例程动态创建SAS代码,然后将其传递给SAS解释器。感谢您的解释。现在对我来说更有意义了很好的解释。我发现把
%upcase()
放在双引号内是一个好习惯。否则,当您使用类似于
%trim()
的内容时,您将无法获得预期的结果(因为双引号内的空格不会被修剪)。我不建议使用引号来确保安全;改为使用宏引号(
%quote()
)或字符串(
str()
),我明白了。我认为我没有正确理解宏变量,我假设它是一个对象存储。思考宏的最佳方式是它们提供了一种为您编写SAS代码的方法。宏例程动态创建SAS代码,然后将其传递给SAS解释器。感谢您的解释。现在对我来说更有意义了很好的解释。我发现把
%upcase()
放在双引号内是一个好习惯。否则,当您使用类似于
%trim()
的内容时,您将无法获得预期的结果(因为双引号内的空格不会被修剪)。我不建议使用引号来确保安全;改为使用宏引号(
%quote()
)或字符串(
str()
)。