SAS posiada potężną funkcję programistyczną zwaną Makrami, która pozwala nam uniknąć powtarzających się fragmentów kodu i używać ich wielokrotnie w razie potrzeby. Pomaga również tworzyć dynamiczne zmienne w kodzie, które mogą przyjmować różne wartości dla różnych instancji tego samego kodu. Makra mogą być również deklarowane dla bloków kodu, które będą wielokrotnie wykorzystywane w podobny sposób jak zmienne makro. Oba te przypadki zobaczymy w poniższych przykładach.
Zmienne makro
Są to zmienne przechowujące wartość, która ma być wielokrotnie używana przez program SAS. Są one deklarowane na początku programu SAS i wywoływane później w treści programu. Mogą mieć zakres globalny lub lokalny.
Zmienna globalna makra
Nazywa się je zmiennymi globalnymi makra, ponieważ dostęp do nich może uzyskać każdy program SAS dostępny w środowisku SAS. Ogólnie rzecz biorąc, są to zmienne przypisane do systemu, do których dostęp ma wiele programów. Ogólnym przykładem jest data systemowa.
Przykład
Poniżej przedstawiono przykład zmiennej SAS o nazwie SYSDATE, która reprezentuje datę systemową. Rozważmy scenariusz polegający na drukowaniu daty systemowej w tytule raportu SAS każdego dnia, w którym jest on generowany. W tytule będzie wyświetlana bieżąca data i dzień bez kodowania jakichkolwiek wartości. Używamy wbudowanego zestawu danych SAS o nazwie CARS dostępnego w bibliotece SASHELP.
proc print data = sashelp.cars;where make = 'Audi' and type = 'Sports' ; TITLE "Sales as of &SYSDAY &SYSDATE";run;
Po uruchomieniu powyższego kodu otrzymujemy następujące dane wyjściowe.
Zmienna makra lokalnego
Zmienne te mogą być dostępne w programach SAS, w których są zadeklarowane jako część programu. Zazwyczaj są one używane do dostarczania różnych zmiennych do tych samych instrukcji SAS, tak aby mogły one przetwarzać różne obserwacje zbioru danych.
Syntaktyka
Zmienne lokalne są opisywane za pomocą poniższej składni.
% LET (Macro Variable Name) = Value;
Pole Wartość może przyjmować dowolną wartość liczbową, tekstową lub datę, zgodnie z wymaganiami programu. Nazwa zmiennej makra jest dowolną poprawną zmienną SAS.
Przykład
Zmienne są używane przez instrukcje SAS za pomocą znaku & dołączonego na początku nazwy zmiennej. Poniższy program wyświetla nam wszystkie obserwacje marki 'Audi’ i typu 'Sport’. W przypadku, gdy chcemy uzyskać wynik dla innej marki, musimy zmienić wartość zmiennej make_name, nie zmieniając żadnej innej części programu. W przypadku programów typu bring zmienna ta może być wielokrotnie przywoływana w dowolnych instrukcjach 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;
Po uruchomieniu powyższego kodu otrzymujemy takie same dane wyjściowe jak w poprzednim programie. Zmieńmy jednak nazwę typu na 'Wagon’ i uruchommy ten sam program. Otrzymamy poniższy wynik.
Programy makro
Makro to grupa instrukcji SAS, do której odnosi się nazwa i można jej użyć w dowolnym miejscu programu, używając tej nazwy. Zaczyna się od instrukcji %MACRO, a kończy instrukcją %MEND.
Syntaktyka
Zmienne lokalne są deklarowane przy użyciu poniższej składni.
# Creating a Macro program.%MACRO <macro name>(Param1, Param2,….Paramn);Macro Statements;%MEND;# Calling a Macro program.%MacroName (Value1, Value2,…..Valuen);
Przykład
Poniższy program dekalifikuje grupę instrukcji SAT w ramach makra o nazwie 'show_result’; Makro to jest wywoływane przez inne instrukcje 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);
Po uruchomieniu powyższego kodu otrzymujemy następujące dane wyjściowe.
Wspólnie używane makra
SAS posiada wiele instrukcji MACRO, które są wbudowane w język programowania SAS. Są one używane przez inne programy SAS bez ich jawnego deklarowania. Typowe przykłady to: kończenie programu po spełnieniu pewnego warunku lub zapisywanie wartości zmiennej w czasie rzeczywistym w dzienniku programu. Poniżej przedstawiono kilka przykładów.
Makro %PUT
Ta makroinstrukcja zapisuje tekst lub informacje o zmiennej makro do dziennika SAS. W poniższym przykładzie wartość zmiennej 'today’ jest zapisywana do dziennika programu.
data _null_;CALL SYMPUT ('today',TRIM(PUT("&sysdate"d,worddate22.)));run;%put &today;
Po uruchomieniu powyższego kodu otrzymujemy następujące dane wyjściowe.
Makro %RETURN
Wykonanie tego makra powoduje normalne zakończenie aktualnie wykonywanego makra, gdy określony warunek okaże się prawdziwy. W poniższym przykładzie, gdy wartość zmiennej „val” osiągnie 10, makro kończy działanie, w przeciwnym razie jest kontynuowane.
%macro check_condition(val); %if &val = 10 %then %return; data p; x = 34.2; run; %mend check_condition; %check_condition(11) ;
Po uruchomieniu powyższego kodu otrzymujemy następujące dane wyjściowe.
Makro %END
Ta makrodefinicja zawiera pętlę %DO %WHILE, która kończy się, zgodnie z wymaganiami, instrukcją %END. W poniższym przykładzie makro o nazwie test pobiera dane wejściowe od użytkownika i uruchamia pętlę DO z wykorzystaniem tej wartości wejściowej.Koniec pętli DO jest osiągany za pomocą instrukcji %END, natomiast koniec makra jest osiągany za pomocą instrukcji %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)
Po uruchomieniu powyższego kodu otrzymujemy następujące dane wyjściowe.
.