2017-01-27 4 views
3

С Sample 35591,SAS: Почему оператор IN внутри макроса не является значением по умолчанию?

Оператор IN может быть использован в% IF заявление только тогда, когда параметр MINOPERATOR установлен в MACRO заявлении% или в качестве опции системы SAS®.

Требование отдельной опции для макрообработки кажется ненужным осложнением. Конечно, синтаксис макроса IN и то, что он может обрабатывать, должен отличаться от шага DATA IN из-за природы макрообработки. Но реализация заставляет программиста отслеживать два разных IN, несмотря на то, что они логически идентичны.

  1. Не являются ли они логически идентичными?
  2. Требуется отдельная опция для макроса IN, предназначенная для напоминания программистам о различиях с шагом DATA IN?
  3. Или есть проблема с ситуацией или обратной совместимостью, которая требует реализации макроса IN таким образом?

Документация для MINOPERATOR.

ответ

7

В примечании говорится, что это доступно только в SAS 9.2 и более поздних версиях. Раньше не было инструкции IN для обработки MACRO. Макросы - это строки, а «IN» - допустимая строка. Параметр должен указать Macro Processor, что IN теперь является ключевым словом. Если бы они просто сделали это ключевым словом, устаревший код, который мог бы содержать «IN», сломался бы.

Итак # 3.

+1

Обратная совместимость. Однажды я работал в банке, где ранний выпуск (который использовался по умолчанию в операторе) разбил несколько устаревших кодов. –

+0

FWIW, я задавался вопросом, почему SAS не создала '% in'keyword и пыталась реализовать мою собственную. Создание макрофункции 'in': '% macro in; % let in = in; ∈% mend; 'Затем тестирование:'% put% in; 'Это генерирует следующее примечание в журнале:' ПРИМЕЧАНИЕ:% IN станет зарезервированным ключевым словом языка SAS Macro в будущей версии системы SAS . Изменение имени этого макроса позволит избежать конфликтов в будущем. –