SAS - makra
SAS ma potężną funkcję programowania o nazwie Macrosco pozwala nam uniknąć powtarzających się sekcji kodu i używać ich wielokrotnie, gdy jest to potrzebne. Pomaga również w tworzeniu zmiennych dynamicznych w kodzie, które mogą przyjmować różne wartości dla różnych uruchomionych instancji tego samego kodu. Makra można również zadeklarować dla bloków kodu, które będą wielokrotnie używane w podobny sposób jak makrozmienne. W poniższych przykładach zobaczymy oba.
Zmienne makro
Są to zmienne, które mają wartość, która ma być używana wielokrotnie przez program SAS. Są deklarowane na początku programu SAS i wywoływane później w treści programu. Mogą mieć zasięg globalny lub lokalny.
Globalna zmienna makro
Nazywa się je globalnymi makrozmiennymi, ponieważ mają do nich dostęp każdy program SAS dostępny w środowisku SAS. Na ogół 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 znajduje się przykład zmiennej SAS o nazwie SYSDATE, która reprezentuje datę systemową. Rozważ scenariusz drukowania daty systemowej w tytule raportu SAS każdego dnia generowania raportu. Tytuł pokaże aktualną datę i dzień bez kodowania dla nich żadnych 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.
Lokalna zmienna makro
Dostęp do tych zmiennych mogą uzyskać programy SAS-owe, w których są zadeklarowane jako część programu. Zazwyczaj są one używane do dostarczania różnych zmiennych do tych samych oświadczeń SAS sl, że mogą przetwarzać różne obserwacje zbioru danych.
Składnia
Zmienne lokalne są dekalowane za pomocą poniższej składni.
% LET (Macro Variable Name) = Value;
W tym przypadku pole Wartość może przyjąć dowolną wartość liczbową, tekstową lub datę, zgodnie z wymaganiami programu. Nazwa makrozmiennej to dowolna prawidłowa zmienna SAS.
Przykład
Zmienne są używane przez instrukcje SAS przy użyciu rozszerzenia & znak dołączany na początku nazwy zmiennej. Poniższy program zawiera wszystkie spostrzeżenia dotyczące marki „Audi” i typu „Sport”. Na wypadek, gdybyśmy chcieli uzyskać wynikdifferent make, musimy zmienić wartość zmiennej make_namebez zmiany jakiejkolwiek innej części programu. W przypadku programów typu bring ta zmienna może być ponownie 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 poprzedni program. Ale zmieńmytype name do 'Wagon'i uruchom ten sam program. Otrzymamy poniższy wynik.
Programy makr
Makro to grupa instrukcji SAS-owych, do których odwołuje się nazwa i których można używać w programie w dowolnym miejscu, używając tej nazwy. Rozpoczyna się instrukcją% MACRO i kończy instrukcją% MEND.
Składnia
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 odwzorowuje grupę stacji SAT pod makro o nazwie 'show_result'; To makro 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.
Powszechnie używane makra
SAS ma wiele instrukcji MACRO, które są wbudowane w język programowania SAS. Są używane przez inne programy SAS-owe bez ich jawnego zadeklarowania. Typowe przykłady to - przerywanie programu, gdy spełniony jest jakiś warunek lub przechwytywanie wartości zmiennej w dzienniku programu. Poniżej znajduje się kilka przykładów.
Makro% PUT
Ta instrukcja makro zapisuje informacje tekstowe lub makrozmienne w dzienniku SAS. W poniższym przykładzie wartość zmiennej „Today” jest zapisywana w dzienniku 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 zostanie uznany za prawdziwy. W poniższym przykładzie, gdy wartość zmiennej"val" staje się 10, makro kończy się w przeciwnym razie kontynuuje.
%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 definicja makra zawiera plik %DO %WHILEpętla, która kończy się, zgodnie z wymaganiami, instrukcją% END. W poniższym przykładzie makro o nazwie test pobiera dane wejściowe użytkownika i uruchamia pętlę DO przy użyciu tej wartości wejściowej. Koniec pętli DO uzyskuje się za pomocą instrukcji% end, natomiast koniec makra uzyskuje się 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.