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)
Когда приведенный выше код запускается, мы получаем следующий результат.