blogi

funkcja makro SAS

język Makro Sas® ogromnie daje programistom SAS wszechstronność i efektywność ich tworzenia kodu. Pozwala użytkownikom SAS modularyzować kod programowania za pomocą komponentów „raz napisanych-wiele razy używanych”, a w wielu przypadkach automatycznie generować kod SAS oparty na danych.

podobne wpisy na blogu: Wielofunkcyjna funkcja makr do uzyskiwania informacji o zestawach danych

język makr i makro procesor

Ogólnie rzecz biorąc, oprogramowanie SAS krok po kroku przetwarza program SAS, najpierw skanując go w poszukiwaniu obiektów języka makr – zmiennych makr oznaczonych jako & somename, a makr oznaczonych jako %somename. Jeśli zostanie znaleziony, oprogramowanie SAS aktywuje makro procesor, który rozwiązuje i zastępuje te odwołania do makr zgodnie ze składnią języka makr, zanim SAS kompiluje i wykonuje kroki programowania.

SAS macro language vs. Język programowania SAS

program SAS składa się zwykle z dwóch, często przeplatających się warstw – warstwy makr i warstwy nie-makr, każda z własną składnią i własnym czasem kompilacji i wykonania. Innymi słowy, kod SAS jest kombinacją dwóch różnych języków:

  • język programowania SAS (składający się z kroków danych, kroków PROC i instrukcji globalnych, takich jak LIBNAME, OPTIONS, TITLE itp.)
  • język makr SAS (składający się z %LET, %IF, %DO, funkcji makr itp.), który jest przetwarzany oddzielnie od i przed wykonaniem kodu języka programowania SAS przez kompilator SAS.

różnica między nimi jest jak różnica między gotowaniem posiłku a jedzeniem posiłku. W tej analogii meal=code, cooking=SAS macro language, eating=SAS programming language. Jasne zrozumienie tej różnicy jest kluczem do sukcesu programisty SAS.

dwa typy makr SAS

istnieją dwa różne typy makr SAS:

  1. makra, które generują kod języka programowania SAS, który może obejmować instrukcje lub kroki SAS;makra
  2. , które generują pewne wartości ciągów znaków, które mogą być używane jako część kodu języka programowania SAS lub wartości danych, ale nie są kompletnymi instrukcjami lub krokami SAS. Ten typ nie generuje żadnego kodu wykonywalnego SAS, tylko wartość.

co to jest funkcja makra SAS?

funkcja SAS macro to makro SAS, które generuje wartość. Innymi słowy, jest to makro typu 2 opisane powyżej. Jak każde makro SAS, funkcje makr SAS mogą mieć dowolną liczbę (zero lub więcej) pozycyjnych lub/i nazwanych parametrów (argumentów). Użytkownicy SAS mogą definiować swoje własne funkcje makr, ale w ten sposób nie można używać żadnej składni języka SAS; dozwolona jest tylko składnia języka makr SAS. Możesz używać istniejących funkcji makr we własnej definicji funkcji makra. Jedną z najpotężniejszych jest m.in. funkcja makro %sysfunc, która wnosi do makro języka SAS bogactwo funkcji języka SAS.

Źródła funkcji makr SAS

funkcje makr SAS mogą pochodzić z następujących trzech źródeł.

wbudowane funkcje makr

wbudowane funkcje makr, które są częścią makro procesora. Są to takie funkcje makr jak % eval, % length, %quote, %scan, %str, %sysfunc, % upcase, itd. Oto pełna lista gotowych funkcji makr SAS.

automatyczne wywoływanie funkcji makr

automatyczne wywoływanie makr, niektóre z nich są typu 1 (makra), a niektóre typu 2 (funkcje makr), takie jak %cmpres, %left, %lowcase, %trim, %verify, itp. Te funkcje makr uzupełniają wbudowane funkcje makr. Główną różnicą od gotowych funkcji makr jest to, że funkcje makr automatycznego wywoływania są przykładami programowymi zdefiniowanych przez użytkownika funkcji makr, które są napisane w języku makr SAS i udostępniane Użytkownikowi bez konieczności definiowania lub dołączania ich do programów. Funkcje makr automatycznego wywoływania są dostarczane wraz z instalacją oprogramowania SAS i zwykle wstępnie skonfigurowane przez ustawienie opcji systemowych MAUTOSOURCE i SASAUTOS= macro. Mogą one obejmować kilka bibliotek makr w zależności od produktów SAS licencjonowanych w Twojej firmie. Na przykład, dla mojej instalacji bazowej SAS automatyczna biblioteka makr jest w następującym folderze:

C:\Program Files\SASHome \ SASFoundation \ 9.4 \ core \ sasmacro

poniżej znajduje się wybrana lista makr automatycznego wywoływania dostarczanych z oprogramowaniem SAS.

z punktu widzenia użycia, nie zauważysz żadnej różnicy między wstępnie zbudowanymi i automatycznymi funkcjami makr. Na przykład, funkcja makra %upcase() jest wbudowana, podczas gdy funkcja makra %lowcase() jest automatycznym wywołaniem funkcji makra. Należą do zupełnie innych rodzin, ale używamy ich tak, jakby były komplementarnym rodzeństwem.

funkcje makr zdefiniowane przez użytkownika

wreszcie istnieją funkcje makr zdefiniowane przez Użytkownika, które nie są dostarczane z instalacją SAS. Są to funkcje makr, które definiujesz samodzielnie. Zazwyczaj są one przechowywane oddzielnie od makr automatycznego wywoływania głównie w celu odróżnienia ich od dostarczanych przez SAS.

aby umożliwić dostęp do własnej biblioteki makr SAS oprócz automatycznej biblioteki makr (lub bibliotek), możesz użyć opcji INSERT = system:
options insert=(sasautos = „path_to_your_own_macro_library_folder”);

zamiast zastępować wartość SASAUTOS, opcja ta wstawia dodatkową wartość do istniejącej opcji SASAUTOS jako pierwszą wartość, co pozwala najpierw podłączyć się do własnej biblioteki makr, a następnie do wstępnie ustawionych bibliotek automatycznego wywołania SAS.

tworzenie funkcji makra zdefiniowanej przez użytkownika

rozważmy następujący przykład. Załóżmy, że chcemy utworzyć funkcję makra, która przyjmuje nazwę zestawu danych jako argument i zwraca wartość równą liczbie obserwacji w tym zbiorze danych.

wiemy,że następujący kod oblicza liczbę obserwacji w zbiorze danych:

data _null_; call symputx('NOBS', n); stop; set SASHELP.CARS nobs = n; run; %put&=NOBS;NOBS=428

Czy możemy utworzyć funkcję makra SAS, załączając ten kod do makra? Coś w tym stylu:

%macro nobs(dset=,result=); %global &result; data _null_; call symputx("&result",n); stop; set &dset Nobs=n; Run;%mend nobs;

odpowiedź brzmi „nie”. Tak, stworzyliśmy poprawne makro; możemy wywołać to makro, aby uzyskać wynik:

 %nobs(dset=SASHELP.CARS, result=NOBS);%put &=NOBS; NOBS=428

ale to nie jest funkcja makra. Pamiętasz makro typu 2, które nie generuje żadnego kodu języka programowania SAS, tylko wartość? Ale to makro generuje kod SAS, który przypisuje wartość zmiennej makra podanej jako drugi argument (result=NOBS).

aby utworzyć poprawną funkcję makra, nasze makro nie powinno zawierać żadnego kodu języka SAS – ani kroku danych, ani kroku PROC. Może składać się wyłącznie z kodu makro języka SAS. Oto ona:

%macro nobs(dset); %local DSID n; %let DSID = %sysfunc(open(&dset)); %if &DSID %then %do; %let n = %sysfunc(attrn(&DSID,nlobs)); %let dsid = %sysfunc(close(&DSID)); %end; %else %put %sysfunc(sysmsg()); &n%mend nobs;

gdy makro procesor wykonuje to makro, jedynym obiektem, który jest przekazywany do kompilatora języka SAS, jest wartość pokazana w wierszu tuż przed %mend. Jest to obliczona wartość liczby obserwacji (oznaczona & n). Jest to jedyna rzecz, która jest widoczna przez kompilator języka SAS, reszta to kod języka makr widoczny i obsługiwany przez makro procesor SAS.

ważne: Podczas definiowania funkcji makra SAS Zawsze używaj instrukcji % local, aby wyświetlić listę wszystkich zmiennych makr utworzonych w makrze, aby upewnić się, że przypadkowo nie nadpiszą zmiennych makr o tej samej nazwie w środowisku wywołującym. Nie musisz deklarować %local dla parametrów makra, ponieważ są one zawsze lokalne automatycznie.

przykłady użycia funkcji makr SAS

gdy funkcja makra jest zdefiniowana w ten sposób, gdziekolwiek umieścisz jej wywołanie %nobs(SASHELP.Samochody) w kodzie SAS zostanie on obliczony i zastąpiony odpowiednią wartością (w tym przypadku jest to liczba 428) przez makro procesor SAS. W ten sposób możesz uniknąć niestandardowego kodowania i sprawić, że kod SAS będzie dynamiczny i wydajny. Funkcje makr można używać w wielu kontekstach kodowania SAS. Na przykład:

  • polecenia przypisania dla zmiennej makro: %let NOBS=%nobs(SASHELP.CARS);
  • polecenie przypisania w kroku danych: x = %nobs(SASHELP.CARS);
  • jako część wyrażenia w kroku danych: x = %nobs(SASHELP.Samochody) / 2 + 3;
  • jako wartość kroku danych do pętli: do i=1 do % nobs (szarf.Samochody);
  • jako wartość makra pętli do: %do &i=1% do %nobs(SASHELP.CARS);
  • jako część warunku w instrukcji IF: if %nobs(SASHELP.Samochody) > 500 to zrób;

i tak dalej. Należy pamiętać, że argumentami (parametrami) funkcji makr muszą być stałe SAS lub makro wyrażenia rozdzielające się na stałe SAS. Ponieważ funkcje makr są rozwiązywane przez makro procesor przed wykonaniem programu SAS, argumenty nie mogą być nazwami zmiennych. Jest to kluczowa różnica między funkcjami makr a funkcjami SAS.

twoje myśli?

Czy uważasz, że ten post jest przydatny? Czy używasz funkcji makro SAS? Czy możesz zasugerować inne przykłady użycia? Podziel się z nami w komentarzach poniżej.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.