我刚刚开始了一份新工作,在那里我学习了 sas,并对<>运算符有疑问。根据我的阅读,这并不等同于"不等于",而是一种MAX函数。
然而,在我的新地方的一个程序中,他们将其用作两个文本值之间的不等于,例如"当前"<>"当前",包含在 IF 中。这是对的吗?如果它的文字不同吗?
作为对SQL语法支持的一部分,SAS必须进行调整,以允许<>
在SQL代码中表示不相等。 当他们扩展WHERE
语句以在几乎所有情况下工作时,他们使用了用于 SQL 实现的库。 因此,在 PROC SQL 代码和 WHERE 语句中,<>
表示不相等。 但在数据步骤代码中,它仍然意味着 MAX。
因此,如果您在IF
语句中使用<>
,那么您正在请求 MAX 运算符而不是 NOT EQUALS 运算符。
57 data _null_;
58 str='Hi';
59 if str <> 'Hi' then put 'TRUE'; else put 'FALSE';
NOTE: The "<>" operator is interpreted as "MAX".
60 run;
NOTE: Character values have been converted to numeric values at the places given by:
(Line):(Column).
59:10
NOTE: Invalid numeric data, 'Hi' , at line 59 column 10.
FALSE
str=Hi _ERROR_=1 _N_=1
啊,是的。<>
是最大运算符,><
是最小运算符。 除非您使用WHERE
子句,否则<>
意味着"不等于"......
混乱? 是的。
FWIW - 为了在我的代码中清楚起见,我使用min()
和max()
和^=
。 这样,阅读我的代码的新人就不会感到困惑。
以下是有关 SAS 中操作员的文档。 大约 2/3 的向下方向,您将看到相关部分:
http://support.sas.com/documentation/cdl/en/lrcon/65287/HTML/default/viewer.htm#p00iah2thp63bmn1lt20esag14lh.htm