Всем добрый день.
Среди сильных сторон версии SAS 9.4 в интернете указывается функция DOSUBL.
Давайте разберем что же в ней такого особенного.
На сайте support.sas.com дается следующее описание данной функции:
Функция позволяет импортировать макро переменные из вызываемой среды и экспортировать макро переменные обратно в вызываемую среду.
Для большей наглядности давайте все же рассмотрим на примерах, а еще лучше в сравнении с функцией CALL EXECUTE.
Для начала создадим макрос, который будет создавать макро переменную xyz (с помощью call symput) и присваивать ей значение передаваемое нашему макросу:
Далее приведу код программы с использованием функции CALL ECECUTE:
- Сверху видно окончание кода макроса.
- Далее с помощью %let создаем макро переменную xyz и присваиваем ей значение q.
- После чего идет data step шаг в котором с помощью функции call execute вызывается созданный нами макрос %doit с параметром aa.
- После переменной xyz_value присваивается значение макро переменной xyz с помощью функции symget.
- В конце выводим значение переменной 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:
И оказалось, что работает она совсем не так, как описано в статье, а точнее вообще не работает.
Так что будьте внимательны.
Надеюсь данная статья была полезна для Вас.
С уважением,
Николай.