используя оператор <> для не равно в SAS с текстом - PullRequest
0 голосов
/ 08 мая 2018

Я только что начал новую работу, где я изучаю sas, и у меня возник вопрос об операторе <>.Из моего прочтения это не означает «Не равно», но является типом функции MAX.

Однако в одной из программ на моем новом месте они используют его как не равное между двумя текстовыми значениями, например'current' <> 'current', содержащийся в IF.Это правильно?он отличается, если его текст?

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

В рамках поддержки синтаксиса 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
0 голосов
/ 08 мая 2018

Ах, да. <> - оператор max, а >< - оператор min. Если вы не используете предложение WHERE, тогда <> означает "не равно" ...

Смешение? Да.

FWIW - для ясности в моем коде я использую min() и max() и ^=. Таким образом, нет никакой путаницы для новых людей, читающих мой код.

Вот документация по операторам в SAS. Примерно на 2/3 пути вниз вы увидите соответствующий раздел:

http://support.sas.com/documentation/cdl/en/lrcon/65287/HTML/default/viewer.htm#p00iah2thp63bmn1lt20esag14lh.htm

...