Вы находитесь на странице: 1из 15

Internship

UA 2022
1 lesson
• Оператор %let позволяет определить макропеременную и
задать ее значение
%let variable=value;
• Если переменная уже существует в символьной таблице (the

Первое, что symbol table), значение переменной заменяет


представленное в таблице.

нужно • Минимальная длина 0 символов, максимальная –65534 симв.


• цифровые лексемы воспринимаются как символы

усвоить из • математические выражения не обрабатываются


• кавычки сохраняются как часть значения
лекций • лидирующие и конечные пробелы удаляются из значения в
процессе присвоения. Чтобы их сохранить надо пользоваться
Терентьева макрофункциями типа %STR или %QUOTR; :
%let numb_of_obs= %STR( 10 );
• Вывод в log значения макропеременной:
%put &numb_of_obs;
%put &=numb_of_obs;
• •Макропеременные можно подставлять одну в
другую:
%let x=aaa;

Первое, что %let x=&x bbb;


%put &x;
нужно Log: аaa bbb
усвоить из •Задание явной границы (.) в коде для названия
макропеременной лучше делать всегда:
лекций %let x=aaa;

Терентьева %let x=&x.bbb;


%put &x;
Log: аaabbb
1. Сначала напишите и отладьте программу без использования
Первые макро кодирования
2. Убедитесь, что программа работает с константами и
шаги в 3.
фиксированными значениями
Измените код программы, переведя все фиксированные
написании значения в макропеременные
4. Используйте системную опцию SYMBOLGEN для дальнейшей
макро отладки программы.

программы Р.S. По сути это продвинутый (и автоматизированный) вариант


«copy»+«paste». Путь разработчика – написать и отладить
из лекций программу без макросов, а потом добавить макросы

Терентьева
Макросы и макропрограммирование

Пример:
%macro substr(ds= ,/*dataset*/
var=, /*variable for cutting*/);
data &ds.;
set sdtm.&ds.;
usubjid = substr(&var., 1, 5);
run;

%mend substr;

%substr(ds=dm, var=usubjid);
ПРАКТИКА
proc import out = Exclusio
datafile = excel
dbms = xlsx replace;
range = "Exclusio$A2:";

Пример из
getnames = yes;
run;

первого %macro imp(raw=);

задания с proc import out = &raw.


datafile = excel
сырыми dbms = xlsx replace;

данными на
range = "&raw.$A2:";
getnames = yes;

интернатуре
run;

%mend imp;

%imp(raw=Exclusio);
%imp(raw=Inclusio);
%imp(raw=Demog);
Условный переход
%if &var= CHANGE %then %do;

…ПОДСТАНОВКА1 Пример:
%end; %macro substr(ds= ,/*dataset*/
%else %if &var= SAME %then %do; var=, /*variable for cutting*/);
…ПОДСТАНОВКА2 data &ds.;
%end; set sdtm.&ds.;
%if &ds=dm %then %do;
usubjid = substr(&var., 1, 5);
%end;
%else %do;
usubjid = substr(&var., 1, 5) || siteid;
%end;
run;

%mend substr;

%substr(ds=dm, var=usubjid);
Макрофункции
Выполняются на этапе
работы макропроцессора,
нужны для обработки
значений
макропеременных
Циклы
• Можно использовать только
внутри макроопределений.
• Справка:
%DO, Iterative Statement ; %DO
%UNTIL Statement ; %DO %WHILE
Statement
Генерация
кода с
помощью
FILE, PUT и
поключение
с помощью
оператора
%INCLUDE
Пример: Выгружаете список из зелёного квадрата

ЗАДАНИЕ:
1. Создать динамическую
макро переменную со
списком переменных
датасета на основе
спецификации для
финального keep перед
выгрузкой в папку Data.
В итоге, после какого-то алгоритма (где
макропараметр только название домена)
обработки этого списка ожидается такой результат
Пример:
Не будет  Можно гуглить – это тоже часть работы
Успехов!

ЗАДАНИЕ:
2. Создать динамическую
макро переменную с
метадатой домена на
основе спецификации для
финальной выгрузкой в
папку Data.

Вам также может понравиться