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, в которых они объявлены как часть программы. Они, как правило, используются для предоставления разных 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» и запустим ту же программу. Мы получим следующий результат.
Макро Программы
Макрос — это группа операторов 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);
Когда приведенный выше код выполняется, мы получаем следующий вывод.
Обычно используемые макросы
SAS имеет много операторов MACRO, которые встроены в язык программирования SAS. Они используются другими программами SAS без явного объявления их. Общими примерами являются: завершение программы при выполнении какого-либо условия или запись значения переменной времени выполнения в журнал программы. Ниже приведены некоторые примеры.
Макро% PUT
Этот оператор макроса записывает текстовую или макропеременную информацию в журнал SAS. В приведенном ниже примере значение переменной «сегодня» записывается в журнал программы.
data _null_; CALL SYMPUT ('today', TRIM(PUT("&sysdate"d,worddate22.))); run; %put &today;
Когда приведенный выше код выполняется, мы получаем следующий вывод.
Макро% ВОЗВРАТ
Выполнение этого макроса вызывает нормальное завершение текущего выполняющегося макроса, когда определенное условие оценивается как истинное. В приведенном ниже примере, когда значение переменной «val» становится равным 10, макрос завершается, в противном случае он продолжается.
%macro check_condition(val); %if &val = 10 %then %return; data p; x = 34.2; run; %mend check_condition; %check_condition(11) ;
Когда приведенный выше код выполняется, мы получаем следующий вывод.
Макро% КОНЕЦ
Это макроопределение содержит цикл % 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)
Когда приведенный выше код выполняется, мы получаем следующий вывод.