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;

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

Переменная локального макроса

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

Синтаксис

Локальные переменные помечены синтаксисом ниже.

% LET (Macro Variable Name) = Value;

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

пример

Переменные используются операторами SAS с использованием & в начале имени переменной добавляется символ. Ниже программа дает нам все наблюдения за маркой Audi и типом Sports. Если нам нужен результатdifferent 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;

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

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

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

Синтаксис

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

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

Macro Statements;

%MEND;

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

пример

Приведенная ниже программа декорирует группу 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);

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

Часто используемые макросы

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

Макрос% PUT

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

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

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

Макро% RETURN

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

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

   data p;
      x = 34.2;
   run;  

%mend check_condition;  

%check_condition(11)  ;

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

Макрос% END

Это определение макроса содержит %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)

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