2.89M
Category: programmingprogramming

Язык программирования SAS. Лекция 6: Macro

1.

Язык программирования SAS
Лекция 6: Macro
TUNECT, LLC. All rights reserved.

2.

SAS MACRO
Преимущества SAS Macro language:
• Созданные макросы могут использоваться как
отдельные программы и переноситься из проекта в
проект, тем самым сокращая время разработки кода
• Макропеременные позволяют избавиться от т.н.
«магических чисел» в коде
• Позволяет повысить удобочитаемость кода и
уменьшить его объем
TUNECT, LLC. All rights reserved.
2

3.

SAS MACRO
1.
Автоматическая подстановка сведений из операционной
системы
2.
Замена повторяющихся значений
3.
Условная макрообработка
4.
Циклическая макрообработка
5.
Динамические программы на основе данных
TUNECT, LLC. All rights reserved.
3

4.

SAS MACRO: процесс разработки макропрограммы
Начните с готовой
SAS программы
Обобщите код,
используя
макропеременны
е
Создайте
определение
макроса
Добавьте сложные
макрообработки
(условная
обработка и
циклы)
TUNECT, LLC. All rights reserved.
Добавьте
параметры на
основе данных
Проверьте
правильность
работы
программы
4

5.

Как создать макро?
%LET
SQL
MACRO
TUNECT, LLC. All rights reserved.
%DO
CALL SYMPUTX
5

6.

%LET
Макропеременные
не имеют
типизации. Все
значения в
макропеременных
хранятся как текст
%LET name =
value
Имена макропеременных:
• Соответствуют
правилам SAS
• Хранятся в верхнем
регистре
• Не чувствительны к
регистру
• Начальные и конечные
пробелы удаляются
• Может хранить от 0 до
65,534 (64К) символов
• Длина
макропеременной
устанавливается
Текстовое
выражени
е
TUNECT, LLC. All rights reserved.
Числовое
выражени
е
Если необходимо,
чтобы значение
макропеременной
подставлялось в код
как текст, используйте
двойные кавычки
6

7.

%LET
Числовые значения или
условия можно
передавать как есть
через амперсанд
Опция SYMBOLGEN
позволяет увидеть в
логе информацию о
подстановке из
макропеременной
Арифметические
выражения не
выполняются по
умолчанию
%SYSEVALF
поддерживает
операции с плавающей
запятой. %EVAL
выполняет только
целочисленные
TUNECT, LLC. All rights reserved.
7

8.

%PUT
• %PUT позволяет вывести некоторый
текст и\или макропеременные в лог
• Используя %PUT можно вывести в лог
сообщения об ошибках\замечания,
используя префиксы NOTE:, WARNING:,
ERROR:, которые также помогают
дополнительно окрасить текст
• Для вывода текста кавычки не
обязательны, но допустимы
• Для вывода окрашенных сообщений
префикс должен быть БЕЗ кавычек,
NOTE:, WARNING:, ERROR: пишутся
капсом, с «:» на конце
TUNECT, LLC. All rights reserved.
8

9.

Полезные мелочи
Как добавить к
макропеременн
ой буквы:
Как работают
кавычки:
TUNECT, LLC. All rights reserved.
Как выводить содержимое
макропеременных в лог:
9

10.

Как создать макро?
%LET
SQL
MACRO
TUNECT, LLC. All rights reserved.
%DO
CALL SYMPUTX
10

11.

SQL
INTO: записывает полученные
из запроса значения в
макропеременную
PROC SQL позволяет
создавать
макропеременные и
заполнять их
значениями на основе
данных
SEPARATED BY позволяет
заполнять макропеременную
значениями из запроса через
разделитель
Для каждой строки можно
создать отдельную
макропеременную
Если количество строк
неизвестно, то можно
создать макропеременные
не закрывая правую
границу, число
подберется автоматически
Можно выводить
несколько
макропеременных через
один запрос
Trimmed убирает
пробелы
TUNECT, LLC. All rights reserved.
11

12.

Как создать макро?
%LET
SQL
MACRO
TUNECT, LLC. All rights reserved.
%DO
CALL SYMPUTX
12

13.

MACRO
SQL
Входные параметры макропеременные
%MACRO macro-name (param1=, param2=, . . .
paramn=);
Создание макроса –
%macro + имя макроса
macro-text
Параметры макроса в
формате param1=value
пишутся в скобках и могут
быть перечислены в
любом порядке,
предопределенные
параметры могут быть
пропущены
%MEND macro-name;
Макрооператор %mend
всегда пишется в
конце макроса
Вызов макроса выполняет
код, содержащийся
внутри макроса с
указанными параметрами
%macro-name (param1 = test, param2 = somevalue,
paramn = 0);
Входные параметры
макроса могут быть
предопределены. В
таком случае, если вы
хотите выполнить
макрос со значениями по
умолчанию, писать их
при вызове не
обязательно
Hi, how are you?
Good morning, have a nice
day!
TUNECT, LLC. All rights reserved.
13

14.

Как создать макро?
%LET
SQL
MACRO
TUNECT, LLC. All rights reserved.
%DO
CALL SYMPUTX
14

15.

%DO
https://www.simplilearn.com/tutorials/sas-tutorial/sas-loops-with-examples
Цикл %do создает
свои собственные
макропеременные и
позволяет совершать
циклическую
макрообработку
Do Loop, Do While & Do
Until
&I в данном цикле
это
макропеременная,
создаваемая через
%do
Цикл может быть как
внутри датастепа,
так и вне его
TUNECT, LLC. All rights reserved.
15

16.

Как создать макро?
%LET
SQL
MACRO
TUNECT, LLC. All rights reserved.
%DO
CALL SYMPUTX
16

17.

CALL SYMPUTX
Позволяет создавать
макропеременные внутри
датастепа и заполнять их
значениями
Название
макропеременно
й
Можно подавать как
значения из переменных,
так и задавать значения
вручную
Подаваемое
значение
Все значения
внутри
макропеременных
хранятся как текст
TUNECT, LLC. All rights reserved.
17

18.

MACRO
SQL
Оператор %LOCAL не
может быть использован в
открытом коде, работает
только внутри макроса.
CALL SYMPUTX
Внутри макроса %LET сначала
пытается переопределить значение
локальной макропеременной, если
локальной с таким именем не
существует, то переопределяется
значение глобальной, и если не
существует глобальной – будет
создана новая локальная
макропеременная.
TUNECT, LLC. All rights reserved.
18

19.

MACRO
SQL
В открытом коде
локальные переменные
недоступны, поэтому
оператор %LET в открытом
коде создает или
переопределяет только
глобальные макро
переменные.
Если
макропеременная
не существовала до
вызова %GLOBAL, то
она создается с
пустым значением
CALL SYMPUTX
Глобальные
макропеременные могут
быть временно перекрыты
локальными переменными
с тем же именем
TUNECT, LLC. All rights reserved.
19

20.

MACRO
SQL
%global a;
%sysfunc(length(&var));
Создание
глобальной
макропеременной
Для обработки
макропеременны
х
%eval(&var1+&var2);
Обработка по
условию
Цикл от 1 до
%if ... %then ...;
количества
%if ... %then %do; ...%end;
значений
написанных через
пробел
%do j = 1 %to %sysfunc(countw(&VARIABLE_NAME));
Находим путь к
текущей
программе SAS
%let currentroot = %sysget(SAS_EXECFILEPATH);
%let root = %substr(%str(&currentroot), 1, %index(%str(&currentroot),
%str(\code\)));
%include "&root.\code\setup\setup.sas";
TUNECT, LLC. All rights reserved.
Идем на папку
выше \code\
%include позволяет
добавить внешний
файл в текущую
программу SAS
20

21.

Как работает &
Правила:
1. Макропроцессор считывает макропеременную слева
направо
2. Два амперсанда (&&) превращаются в один
амперсанд (&) при сканировании
3. Для нескольких амперсандов правило повторного
сканирования работает до тех пор, пока не
останется больше амперсандов, т. е.
макропеременная получает окончательное значение
ИЛИ выдается сообщение об ошибке
&first&second = second3
– макропеременная first преобразуется в second, затем second
преобразуется в 3.
&&first&second = test
– два амперсанда превращаются в один, и сканер продолжает
работу, затем second преобразуется в 3, а затем &first3
превращается в test.
https://www.lexjansen.com/phuse/2015/cc/CC08.pdf
&&&first&second = test2
– первые два амперсанда превращаются в один, затем first
TUNECT,
LLC. All rights reserved.
преобразуется
в second, а затем second преобразуется в 3, а
21
English     Русский Rules