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:


И оказалось, что работает она совсем не так, как описано в статье, а точнее вообще не работает. 

Так что будьте внимательны.

Надеюсь данная статья была полезна для Вас.

С  уважением, 
Николай.








Ярлыки: , ,