在 SAS 中使用 <> 运算符表示不等于文本



我刚刚开始了一份新工作,在那里我学习了 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

最新更新