SAS ^ makró nyelv rendkívül felhatalmazza SAS programozók sokoldalúságát és hatékonyságát a kód fejlesztés. Lehetővé teszi a SAS felhasználók számára, hogy modulálják a programozási kódot az “egyszer írt – sokszor használt” összetevőkkel, és sok esetben automatikusan adatvezérelt SAS kódot generálnak.
kapcsolódó blogbejegyzés: Többcélú makró funkció az adatkészletekkel kapcsolatos információk megszerzéséhez
makró nyelv és makroprocesszor
általában a SAS szoftver lépésről lépésre dolgozza fel a SAS programot, először makró nyelvi objektumok után kutatva – makró változók hivatkozása &somename, és makrók hivatkozása: %somename. Ha megtalálható, a SAS szoftver aktiválja a makró processzort, amely megoldja és helyettesíti ezeket a makró hivatkozásokat a makró nyelv szintaxisának megfelelően, mielőtt a SAS lefordítja és végrehajtja a programozási lépéseket.
SAS makró nyelv vs. SAS programozási nyelv
A SAS program általában két, gyakran összefonódó rétegből áll-makrórétegből és nem makrórétegből, mindegyik saját szintaxisával és saját fordítási és végrehajtási időzítésével. Más szavakkal, a SAS kód két különböző nyelv kombinációja:
- SAS programozási nyelv (ADATLÉPÉSEKBŐL, PROC lépésekből és globális utasításokból áll, mint például LIBNAME, OPTIONS, TITLE stb.)
- SAS makró nyelv (%LET, %IF, %DO, makrófunkciók stb.), amely külön feldolgozásra kerül, és mielőtt a SAS fordító végrehajtja a SAS programozási nyelv kódját.
a különbség közöttük olyan, mint a különbség az étkezés szakácsa és az étkezés között. Ebben az analógiában étkezés = kód, szakács=SAS makró nyelv, evés=SAS programozási nyelv. Ennek a különbségnek a világos megértése a kulcsa a sikeres SAS programozóvá váláshoz.
kétféle SAS makró
A SAS makróknak két különböző típusa van:
- makrók, amelyek létrehoznak néhány SAS programozási nyelv kódot, amely ÁTÍVELHET a SAS utasításokon vagy lépéseken;
- makrók, amelyek bizonyos karakterláncértékeket generálnak, amelyek felhasználhatók a SAS programozási nyelv kódjának vagy adatértékeinek részeként, de ezek nem teljes SAS utasítások vagy lépések. Ez a típus nem generál SAS futtatható kódot, csak egy értéket.
mi az a SAS makrófunkció?
SAS makrófunkció egy SAS makró, amely értéket generál. Más szavakkal, ez a fent leírt 2. típusú makró. Mint minden SAS makró, a SAS makrófüggvények tetszőleges számú (nulla vagy több) pozíciós vagy/és megnevezett paramétert (argumentumokat) tartalmazhatnak. A SAS felhasználók meghatározhatják saját makrófunkcióikat, de ennek során nem használhat semmilyen SAS nyelvi szintaxist; csak a SAS makró nyelv szintaxisa megengedett. Használhatja a meglévő makrófunkciókat a saját makrófunkció-definíciójában. Többek között az egyik legerősebb a %SYSFUNC makró funkció, amely rengeteg SAS nyelvi funkciót hoz a SAS makró nyelvébe.
A SAS makrófunkciók forrásai
A SAS makrófunkciók a következő három forrásból származhatnak.
előre elkészített makrófunkciók
előre elkészített makrófunkciók, amelyek a makroprocesszor részét képezik. Ezek olyan makrófunkciók, mint a %eval, %length, %quote, %scan, %str, %sysfunc, %upcase stb. Itt található az előre elkészített SAS makrófunkciók teljes listája.
automatikus hívás makrófunkciók
automatikus hívás makrók, amelyek közül néhány 1. típusú (makrók), néhány pedig 2.típusú (makrófunkciók), például %cmpres, %left, %lowcase, %trim, %verify stb. Ezek a makrófunkciók kiegészítik az előre elkészített makrófunkciókat. A fő különbség az előre elkészített makrófunkcióktól az, hogy az automatikus hívás makrófunkciók a felhasználó által definiált makrófunkciók programmintái, amelyeket SAS makró nyelven írnak, és elérhetővé teszik az Ön számára anélkül, hogy meg kellene határoznia vagy be kellene vennie őket a programokba. Az automatikus hívás makró funkciók a SAS szoftver telepítésével érkeznek, és általában előre konfigurálva vannak az Ön számára a MAUTOSOURCE és a SASAUTOS= makró rendszer beállításainak beállításával. A webhelyen engedélyezett SAS-termékektől függően több makrókönyvtárat is tartalmazhatnak. Például a SAS ALAPTELEPÍTÉS esetén az automatikus hívás makró könyvtár a következő mappában található:
C:\Program Files \ SASHome \ SASFoundation \ 9.4 \ core \ sasmacro
itt található a SAS szoftverrel ellátott automatikus hívás makrók kiválasztott listája.
a használat szempontjából nem fog észrevenni különbséget az előre elkészített és az automatikus hívás makrófunkciók között. Például a %upcase () makrófunkció előre felépített, míg a %lowcase() makrófunkció automatikus hívás makrófunkció. Teljesen más családokhoz tartoznak, de úgy használjuk őket, mintha kiegészítő testvérek lennének.
felhasználó által definiált makrófunkciók
végül vannak olyan felhasználó által definiált makrófunkciók, amelyek nem tartoznak a SAS telepítéséhez. Ezek azok a makrófunkciók, amelyeket önállóan határoz meg. Általában az automatikus hívás makróktól elkülönítve tartják őket, elsősorban azért, hogy megkülönböztessék őket a SAS által szállított makróktól.
az automatikus hívás makró könyvtár (vagy könyvtárak) mellett a saját SAS makró könyvtárhoz való hozzáférés engedélyezéséhez használhatja az INSERT = system opciót:
options insert=(sasautos= “path_to_your_own_macro_library_folder”);
a SASAUTOS érték helyett ez az opció egy további értéket szúr be a meglévő SASAUTOS opcióba első értékként, így először a saját makró könyvtárába, majd az előre beállított SAS automatikus híváskönyvtárakba is bekapcsolódhat.
felhasználó által definiált makrófunkció létrehozása
tekintsük a következő példát. Tegyük fel, hogy olyan makrófunkciót akarunk létrehozni, amely argumentumként egy adathalmaz nevét veszi fel, és az adott adathalmaz megfigyeléseinek számával megegyező értéket ad vissza.
tudjuk,hogy a következő kód kiszámítja az adatkészletben lévő megfigyelések számát:
data _null_; Call symputx('NOBS', n); stop; set SASHELP.CARS nobs=n; run; % put &=NOBS;NOBS=428
létrehozhatunk egy SAS makrófunkciót, ha ezt a kódot makróba zárjuk? Valami ilyesmi:
%makró nobs(dset=,eredmény=); %globális &eredmény; adatok _null_; hívás symputx("&eredmény",n); stop; állítsa be a &dset Nobs=n; Futtatás;%mend nobs;
a válasz “nem”. Igen, létrehoztunk egy érvényes makrót; meghívhatjuk ezt a makrót az eredmény előállításához:
%nobs(dset=SASHELP.CARS, result=NOBS);%put &=NOBS; NOBS=428
de ez nem makrófunkció. Ne feledje, Típus 2 makró, amely nem generál SAS programozási nyelv kód, csak egy érték? Ez a makró azonban létrehoz SAS kódot, amely értéket rendel a második argumentumként megadott makróváltozóhoz (eredmény=NOBS).
egy érvényes makrófunkció létrehozásához a makrónkban nem lehet SAS nyelvi kód – sem ADATLÉPÉS, sem PROC lépés. Lehet, hogy csak a SAS makró nyelvi kódjából áll. Itt van:
%makró nobs(dset); %helyi dsid n; %let dsid = %sysfunc(open(&dset)); %ha &dsid %akkor %do; %let n = %sysfunc(atrn(&DSID,nlobs)); %let DSID = %sysfunc(close(&DSID)); %end; %else %put %sysfunc(sysmsg()); &n%mend nobs;
amikor a makroprocesszor végrehajtja ezt a makrót, az egyetlen objektum, amely átkerül a SAS nyelvi fordítóhoz, a közvetlenül a %javításnál látható sorban látható érték. Ez a megfigyelések számának számított értéke (&n ). Ez az egyetlen dolog, ami látható a SAS nyelvi fordító, a többi a makró nyelvi kód látható, és kezeli SAS makró processzor.
fontos: A SAS makrófunkció meghatározásakor mindig használja a % local utasítást a makróban létrehozott összes makróváltozó felsorolásához annak biztosítása érdekében, hogy véletlenül ne írják felül az azonos nevű makróváltozókat a hívókörnyezetben. A makróparaméterekhez nem kell %local-t deklarálnia, mivel azok mindig automatikusan lokálisak.
SAS makrófunkciók használati példák
Ha egy makrófunkció ilyen módon van meghatározva, bárhová is helyezi a meghívását % nobs (SASHELP.Az Ön SAS-kódjában a SAS makroprocesszor kiértékeli és kicseréli a megfelelő értékre (ebben az esetben a 428-as szám). Így elkerülheti a nem megfelelő kemény kódolást, és dinamikussá és erőteljessé teheti a SAS-kódot. A makrófunkciókat számos SAS kódolási környezetben használhatja. Például:
- hozzárendelési utasítások makróváltozóhoz: %legyen NOBS=%nobs (SASHELP.Autók);
- hozzárendelési utasítás egy ADATLÉPÉSBEN: x = % nobs (SASHELP.Autók);
- egy ADATLÉPÉS kifejezésének részeként: x = % nobs (SASHELP.CARS)/2 + 3;
- mint egy adatlépés do hurok értéke: do I=1 hogy %nobs (SASHELP.CARS);
- egy makró do hurok értékeként: %do & i=1% – %nobs(SASHELP.Autók);
- részeként feltétel IF utasítás: ha %nobs (SASHELP.Autók) > 500 majd csináld;
és így tovább. Fontos megjegyezni, hogy a makrófunkciók argumentumainak (paramétereinek) vagy SAS állandóknak, vagy SAS állandókra oldódó makró kifejezéseknek kell lenniük. Mivel a makrófunkciókat a makroprocesszor megoldja a SAS program végrehajtása előtt, az argumentumok nem lehetnek változónevek. Ez a legfontosabb különbség a makrófunkciók és a SAS függvények között.
a gondolataid?
hasznosnak találja ezt a bejegyzést? Használ SAS makró funkciókat? Tudna más használati példákat is javasolni? Kérjük, ossza meg velünk az alábbi megjegyzéseket.