Similar presentations:
Язык программирования 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 MACRO1.
Автоматическая подстановка сведений из операционной
системы
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.
SQLINTO: записывает полученные
из запроса значения в
макропеременную
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.
MACROSQL
Входные параметры макропеременные
%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.
%DOhttps://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.
MACROSQL
Оператор %LOCAL не
может быть использован в
открытом коде, работает
только внутри макроса.
CALL SYMPUTX
Внутри макроса %LET сначала
пытается переопределить значение
локальной макропеременной, если
локальной с таким именем не
существует, то переопределяется
значение глобальной, и если не
существует глобальной – будет
создана новая локальная
макропеременная.
TUNECT, LLC. All rights reserved.
18
19.
MACROSQL
В открытом коде
локальные переменные
недоступны, поэтому
оператор %LET в открытом
коде создает или
переопределяет только
глобальные макро
переменные.
Если
макропеременная
не существовала до
вызова %GLOBAL, то
она создается с
пустым значением
CALL SYMPUTX
Глобальные
макропеременные могут
быть временно перекрыты
локальными переменными
с тем же именем
TUNECT, LLC. All rights reserved.
19
20.
MACROSQL
%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(¤troot), 1, %index(%str(¤troot),
%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