blogit

SAS: n makrofunktio

SAS® – Makrofunktio voimaannuttaa SAS: n ohjelmoijia valtavasti monipuolisuudellaan ja tehokkuudellaan koodin kehittämisessä. Sen avulla SAS-käyttäjät voivat modularisoida ohjelmakoodia” once written – many times used ” -komponenteilla ja monissa tapauksissa tuottaa automaattisesti dataohjattua SAS-koodia.

aiheeseen liittyvä blogikirjoitus: Monikäyttöinen makrofunktio tietojen saamiseksi tietojoukoista

makrokieli ja makroprosessori

yleensä SAS – ohjelmisto käsittelee SAS-ohjelmasi askel askeleelta, ensin skannaten sen makrokielen objektien varalta-makromuuttujat, joihin viitataan nimellä &somenimi, ja makrot, joihin viitataan nimellä %somenimi. Jos löytyy, SAS-ohjelmisto aktivoi makrosuorittimen, joka ratkaisee ja korvaa nämä makroviittaukset makrokielen syntaksin mukaan ennen kuin SAS kokoaa ja suorittaa ohjelmointivaiheesi.

SAS: n makrokieli vs. SAS-ohjelmointikieli

SAS – ohjelma koostuu yleensä kahdesta, usein toisiinsa kietoutuvasta kerroksesta-makrokerroksesta ja ei-makrokerroksesta, joilla kummallakin on oma syntaksinsa ja oma koostamisen ja suorittamisen ajoitus. Toisin sanoen SAS-koodi on kahden erillisen kielen yhdistelmä:

  • SAS-ohjelmointikieli (koostuu DATAVAIHEISTA, PROC-vaiheista ja yleislauseista, kuten LIBNAME, OPTIONS, TITLE jne.)
  • SAS makro kieli (koostuu % LET, %IF, %DO, makrofunktiot jne.), jota käsitellään erikseen SAS-kääntäjästä ja ennen kuin SAS-kääntäjä suorittaa SAS – ohjelmointikielen koodin.

niiden välinen ero on kuin ero ruoan valmistamisen ja aterian syömisen välillä. Tässä analogiassa ateria=koodi, ruoanlaitto=SAS makrokieli, syöminen = SAS-ohjelmointikieli. Tämän eron selkeä ymmärtäminen on avain menestyväksi SAS-ohjelmoijaksi tulemiseen.

kahdentyyppisiä SAS: n makroja

on olemassa kahta eri tyyppiä SAS: n makroja:

  1. makroja, jotka tuottavat SAS: n ohjelmointikielen koodia, joka voi ulottua SAS: n lauseiden tai vaiheiden yli;
  2. makrot, jotka tuottavat joitain merkkijonoarvoja, joita voidaan käyttää osana SAS-ohjelmointikielen koodia tai tietoarvoja, mutta ne eivät ole täydellisiä SAS: n lausuntoja tai vaiheita. Tämä tyyppi ei luo mitään SAS suoritettavaa koodia, vain arvon.

mikä on SAS: n makrofunktio?

SAS: n makrofunktio on SAS: n makro, joka tuottaa arvon. Toisin sanoen se on edellä kuvattu tyypin 2 makro. Kuten kaikilla SAS: n makrofunktioilla, SAS: n makrofunktioilla voi olla mikä tahansa määrä (nolla tai enemmän) positio-tai/ja nimettyjä parametreja (argumentteja). SAS-käyttäjät voivat määritellä omat makrotoimintonsa, mutta näin tehdessään et saa käyttää mitään SAS-kielen syntaksia; ainoastaan SAS-makrokielen syntaksi on sallittu. Voit käyttää olemassa olevia makrofunktioita omassa makrofunktiomäärityksessäsi. Yksi tehokkaimmista on muun muassa %sysfunc-makrofunktio, joka tuo runsaasti SAS-kielen funktioita SAS-makro-kieleen.

SAS: n makrofunktioiden lähteet

SAS: n makrofunktiot voivat tulla seuraavista kolmesta lähteestä

valmiiksi rakennetut makrofunktiot

valmiiksi rakennetut makrofunktiot, jotka ovat osa makrosuoritinta. Nämä ovat sellaisia makrofunktioita kuin %eval, % length, % quote, %scan, %str, %sysfunc, %upcase jne. Tässä on täydellinen luettelo valmiiksi rakennetuista SAS: n makrofunktioista.

Automaattikutsu-makrofunktiot

automaattikutsu-makrot, joista osa on tyypin 1 (makrot) ja osa tyypin 2 (makrofunktiot), kuten %cmpres, %left, %lowcase, %trim, %verify jne. Nämä makrofunktiot täydentävät valmiiksi rakennettuja makrofunktioita. Suurin ero valmiiksi rakennettuihin makrofunktioihin on se, että automaattikutsu-makrofunktiot ovat ohjelmanäytteitä käyttäjän määrittelemistä MAKROFUNKTIOISTA, jotka on kirjoitettu SAS: n makro-kielellä ja saat ne käyttöön ilman, että niitä tarvitsee määritellä tai sisällyttää ohjelmiisi. Automaattiset makrotoiminnot tulevat SAS-ohjelmiston asennuksen mukana ja ne on yleensä valmiiksi määritetty sinulle asettamalla MAUTOSOURCE ja SASAUTOS= makrojärjestelmäasetukset. Ne voivat sisältää useita makro kirjastoja riippuen SAS tuotteita lisensoitu sivustossasi. Esimerkiksi SAS-perusasennusta varten automaattikutsun makrokirjasto on seuraavassa kansiossa:

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

tässä on valittu luettelo SAS-ohjelmiston sisältämistä automaattisista puhelumakroista.

käytön kannalta et huomaa mitään eroa valmiiksi rakennettujen ja automaattikutsun makrotoimintojen välillä. Esimerkiksi makrofunktio %upcase() on valmiiksi rakennettu, kun taas makrofunktio %lowcase () on automaattikutsu makrofunktio. He kuuluvat täysin eri perheisiin, mutta käytämme heitä ikään kuin he olisivat täydentäviä sisaruksia.

käyttäjän määrittelemät makrofunktiot

lopuksi on olemassa käyttäjän määrittelemiä makrofunktioita, jotka eivät tule SAS-asennuksen mukana. Nämä ovat makrofunktioita, jotka määrittelet itse. Yleensä ne pidetään erillään automaattikutsumakroista lähinnä siksi, että ne erotettaisiin SAS: n toimittamista makroista.

Jos haluat käyttää omaa SAS-makrokirjastoasi automaattisen makrokirjaston (tai kirjastojen) lisäksi, voit käyttää INSERT= system-vaihtoehtoa:
options insert=(sasautos= ”path_to_your_own_macro_library_folder”);

Tämä asetus ei korvaa SASAUTOS-arvoa, vaan lisää lisäarvon olemassa olevaan SASAUTOS-vaihtoehtoon ensimmäisenä arvona, jolloin voit käyttää ensin omaa makrokirjastoasi ja sitten myös valmiiksi asetettuja SAS-automaattikutsukirjastoja.

luodaan käyttäjän määrittelemä makrofunktio

tarkastellaan seuraavaa esimerkkiä. Oletetaan, että haluamme luoda makrofunktion, joka ottaa datajoukon nimen argumentiksi ja palauttaa arvon, joka vastaa kyseisen tietojoukon havaintojen määrää.

tiedämme,että seuraava koodi laskee havaintojen määrän tietojoukossa:

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

Voimmeko luoda SAS-makrofunktion liittämällä tämän koodin makroon? Jotain tällaista:

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

vastaus on ”ei”. Kyllä, loimme kelvollisen makron; Voimme käyttää tätä makroa tuloksen tuottamiseen:

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

mutta tämä ei ole makrofunktio. Muistatko tyypin 2 makron, joka ei luo mitään SAS – ohjelmointikielen koodia, vain arvon? Mutta tämä makro tuottaa SAS-koodin, joka antaa arvon toisena argumenttina määritellylle makromuuttujalle (tulos=NOBS).

kelvollisen makrofunktion luomiseksi makrossamme ei pitäisi olla mitään SAS – kielikoodia-ei TIETOASKELTA eikä PROC-askelta. Se voi koostua vain SAS: n makrokielikoodista. Tässä se on:

%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;

kun makrosuoritin suorittaa tämän makron, ainoa kohde, joka siirtyy SAS-kielen kääntäjälle, on rivillä juuri ennen %mendiä esitetty arvo. Tämä on havaintojen lukumäärän laskennallinen arvo (merkitään &n ). Tämä on ainoa asia, joka on näkyvissä SAS kielen kääntäjä, loput on makro kielen koodi näkyvissä ja käsitellään SAS makro prosessori.

tärkeä: Kun määrittelet SAS-makrofunktion, käytä aina %local statement-lauseketta listataksesi kaikki makroosi luodut makromuuttujat, jotta ne eivät vahingossa korvaa kutsuympäristössä olevia samannimisiä makromuuttujia. Sinun ei tarvitse ilmoittaa %local makro parametreille, koska ne ovat aina paikallisia automaattisesti.

SAS: n makrofunktiot käyttöesimerkkejä

kun makrofunktio on määritelty tällä tavalla, missä tahansa sen kutsuarvo %nobs(SASHELP.Autot) SAS-koodissasi se arvioidaan ja korvataan vastaavalla arvolla (tässä tapauksessa se on numero 428) SAS: n makroprosessorilla. Näin voit välttää ala-arvoista kovaa koodausta ja tehdä SAS-koodistasi dynaamisen ja tehokkaan. Voit käyttää makrofunktioita monissa SAS-koodausyhteyksissä. Esimerkiksi:

  • Jakolauseet makromuuttujalle: %let NOBS=%nobs(SASHELP.Autot);
  • Tehtävälauseke DATAVAIHEESSA: x = %nobs(SASHELP.Autot);
  • osana DATAVAIHEEN lauseketta: x = %nobs(SASHELP.Autot) / 2 + 3;
  • DATAPORTAAN arvona do loop: do I=1 – % nobs(SASHELP.Autot);
  • makron do-silmukan arvona: %do &i=1% to %nobs(SASHELP.Autot);
  • osana ehtoa IF statement: if %nobs(SASHELP.Autot) > 500 then do;

ja niin edelleen. On tärkeää huomata, että makrofunktioiden argumenttien (parametrien) tulee olla joko SAS-vakioita tai MAKROILMAISUJA, jotka ratkaisevat SAS-vakioita. Koska makrofunktiot ratkeavat makroprosessorilla ennen SAS-ohjelman suoritusta, argumentit eivät voi olla muuttujien nimiä. Tämä on makrofunktioiden ja SAS-funktioiden keskeinen ero.

your thoughts?

pidätkö tätä viestiä hyödyllisenä? Käytätkö SAS makro toimintoja? Voitko ehdottaa muita käyttöesimerkkejä? Kerro meille alla olevissa kommenteissa.

Vastaa

Sähköpostiosoitettasi ei julkaista.