SAS 9.4. DOSUBL Function.

Всем добрый день.

Среди сильных сторон версии SAS 9.4 в интернете указывается функция DOSUBL.

Давайте разберем что же в ней такого особенного.

На сайте support.sas.com дается следующее описание данной функции:

Функция позволяет импортировать макро переменные из вызываемой среды и экспортировать макро переменные обратно в вызываемую среду.

Для большей наглядности давайте все же рассмотрим на примерах, а еще лучше в сравнении с функцией CALL EXECUTE.

Для начала создадим макрос, который будет создавать макро переменную xyz (с помощью call symput) и присваивать ей значение передаваемое нашему макросу:










Далее приведу код программы с использованием функции CALL ECECUTE:
































  1. Сверху видно окончание кода макроса. 
  2. Далее с помощью %let создаем макро переменную xyz и присваиваем ей значение q.
  3. После чего идет data step шаг в котором с помощью функции call execute вызывается созданный нами макрос %doit с параметром aa.
  4. После переменной xyz_value присваивается значение макро переменной xyz с помощью функции symget.
  5. В конце выводим значение переменной xyz_value.
Как мы видим из лога значение переменной вывелось равным q.
Это произошло потому что код, который выводился с помощью функции call execute выполнился после выполнения основного шага data step.
В принципе это видно также из лога, но давайте это проверим:



















Действительно значение переменной изменилось на то, которое мы хотели, а именно на aa

Теперь давайте приведем тот же самый пример, только с использованием функции dosubl:

Здесь я не буду расписывать столь подробно, как предыдущий шаг.
Однако видно, что макро doit выполнился раньше основного шага data step, что привело к изменению макро переменной xyz.
Что мы и наблюдаем в логе, где переменной xyz_value выведено bb значение.
 Данный пример иллюстрирует полезность рассматриваемой нами функции DOSUBL.
P.S.
Когда искал информацию по функции dosubl наткнулся на следующую статью 
В принципе из нее и был взят пример. Однако что меня поразило, что эта функция появилась еще в версии 9.3. Тогда стоит вопрос, почему же ее начали расхваливать только с версии 9.4.
И я решил проверить, запустив данный пример на версии SAS 9.3:
И оказалось, что работает она совсем не так, как описано в статье, а точнее вообще не работает. 
Так что будьте внимательны.
Надеюсь данная статья была полезна для Вас.
С  уважением, 
Николай.


Добавить комментарий

Войти с помощью: 

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.