Учебники

SAS — Макросы

SAS имеет мощную функцию программирования под названием Macros, которая позволяет нам избегать повторяющихся участков кода и использовать их снова и снова, когда это необходимо. Это также помогает создавать в коде динамические переменные, которые могут принимать разные значения для разных экземпляров прогона одного и того же кода. Макросы также могут быть объявлены для блоков кода, которые будут многократно использоваться аналогично макропеременным. Мы увидим оба из них в следующих примерах.

Макропеременные

Это переменные, которые содержат значение, которое будет снова и снова использоваться программой SAS. Они объявляются в начале программы SAS и вызываются позже в основной части программы. Они могут быть глобальными или локальными по объему.

Глобальная макро-переменная

Их называют глобальными макропеременными, потому что к ним может обращаться любая программа SAS, доступная в среде SAS. Как правило, это системные переменные, к которым обращаются несколько программ. Общий пример — системная дата.

пример

Ниже приведен пример переменной SAS с именем SYSDATE, которая представляет системную дату. Рассмотрим сценарий для печати системной даты в заголовке отчета SAS каждый день, когда отчет генерируется. Заголовок покажет текущую дату и день без кодирования каких-либо значений для них. Мы используем встроенный набор данных SAS под названием CARS, доступный в библиотеке SASHELP.

proc print data = sashelp.cars;
where make = 'Audi' and type = 'Sports' ;
 TITLE "Sales as of &SYSDAY &SYSDATE";
run;

Когда приведенный выше код выполняется, мы получаем следующий вывод.

global_macro_result

Локальная переменная макроса

Эти переменные могут быть доступны для программ SAS, в которых они объявлены как часть программы. Они, как правило, используются для предоставления разных varaibels одним и тем же операторам SAS, чтобы они могли обрабатывать разные наблюдения набора данных.

Синтаксис

Локальные переменные имеют декальтарный синтаксис.

% LET (Macro Variable Name) = Value;

Здесь поле «Значение» может принимать любое числовое, текстовое значение или значение даты, как того требует программа. Имя макрокоманды — это любая допустимая переменная SAS.

пример

Переменные используются операторами SAS с использованием символа &, добавляемого в начале имени переменной. Ниже программа собирает все наблюдения за маркой «Ауди» и типом «Спорт». В случае, если мы хотим получить результат другого make , нам нужно изменить значение переменной make_name без изменения какой-либо другой части программы. В случае программ переноса эта переменная может быть снова и снова указана в любых операторах SAS.

%LET make_name = 'Audi';
%LET type_name = 'Sports';
proc print data = sashelp.cars;
where make = &make_name and type = &type_name ;
 TITLE "Sales as of &SYSDAY &SYSDATE";
run;

Когда приведенный выше код выполняется, мы получаем тот же вывод, что и предыдущая программа. Но давайте изменим имя типа на «Wagon» и запустим ту же программу. Мы получим следующий результат.

local_macro_result

Макро Программы

Макрос — это группа операторов SAS, на которые ссылается имя и которые можно использовать в программе где угодно, используя это имя. Он начинается с оператора% MACRO и заканчивается оператором% MEND.

Синтаксис

Локальные переменные объявлены с синтаксисом ниже.

# Creating a Macro program.
%MACRO <macro name>(Param1, Param2,….Paramn);

Macro Statements;

%MEND;

# Calling a Macro program.
%MacroName (Value1, Value2,…..Valuen);

пример

Приведенная ниже программа декальзирует группу STAT-сетей SAT под макросом с именем ‘show_result’; Этот макрос вызывается другими операторами SAS.

%MACRO show_result(make_ , type_);
proc print data = sashelp.cars;
where make = "&make_" and type = "&type_" ;
TITLE "Sales as of &SYSDAY &SYSDATE";
run;
%MEND;

%show_result(BMW,SUV);

Когда приведенный выше код выполняется, мы получаем следующий вывод.

program_macro_result

Обычно используемые макросы

SAS имеет много операторов MACRO, которые встроены в язык программирования SAS. Они используются другими программами SAS без явного объявления их. Общими примерами являются: завершение программы при выполнении какого-либо условия или запись значения переменной времени выполнения в журнал программы. Ниже приведены некоторые примеры.

Макро% PUT

Этот оператор макроса записывает текстовую или макропеременную информацию в журнал SAS. В приведенном ниже примере значение переменной «сегодня» записывается в журнал программы.

data _null_;
CALL SYMPUT ('today',
TRIM(PUT("&sysdate"d,worddate22.)));
run;
%put &today;

Когда приведенный выше код выполняется, мы получаем следующий вывод.

macro_put

Макро% ВОЗВРАТ

Выполнение этого макроса вызывает нормальное завершение текущего выполняющегося макроса, когда определенное условие оценивается как истинное. В приведенном ниже примере, когда значение переменной «val» становится равным 10, макрос завершается, в противном случае он продолжается.

%macro check_condition(val);
   %if &val = 10 %then %return;

   data p;
      x = 34.2;
   run;  

%mend check_condition;  

%check_condition(11)  ;

Когда приведенный выше код выполняется, мы получаем следующий вывод.

macro_return

Макро% КОНЕЦ

Это макроопределение содержит цикл % DO% WHILE, который заканчивается, как требуется, оператором% END. В приведенном ниже примере макрос с именем test принимает пользовательский ввод и запускает цикл DO, используя это входное значение. Завершение цикла DO достигается с помощью оператора% end, в то время как конец макроса достигается с помощью оператора% mend.

%macro test(finish);
   %let i = 1;
   %do %while (&i <&finish);
      %put the value of i is &i;
      %let i=%eval(&i+1);
   %end;
%mend test;
%test(5)

Когда приведенный выше код выполняется, мы получаем следующий вывод.