SAS® Makrospråk gir SAS programmerere allsidighet og effektivitet i kodeutviklingen. DET gjør DET MULIG FOR SAS-brukere å modulere programmeringskoden med» en gang skrevet – mange ganger brukt » komponenter, og i mange tilfeller automatisk generere datadrevet SAS-kode.
Relatert blogginnlegg: Multi-purpose makrofunksjon for å få informasjon om datasett
Makrospråk og makroprosessor
VANLIGVIS BEHANDLER SAS-programvaren SAS-programmet trinnvis, først skanner det for makrospråkobjekter-makrovariabler referert til som &somnavn og makroer referert til som %somnavn. HVIS FUNNET, AKTIVERER SAS programvare makroprosessor som løser og erstatter disse makro referanser i henhold til makro språk syntaks FØR SAS kompilerer og utfører programmeringstrinnene.
SAS makro språk vs. SAS programmeringsspråk
ET SAS-program består vanligvis av to, ofte sammenvevde lag-makrolag og ikke-makrolag, hver med sin egen syntaks og sin egen timing for kompilering og utførelse. MED ANDRE ord ER SAS-koden en kombinasjon av to forskjellige språk:
- SAS programmeringsspråk (bestående AV datastrinn, PROC-trinn og globale uttalelser som LIBNAME, ALTERNATIVER, TITTEL etc.)
- SAS makro språk (består av % LA, % HVIS, %GJØR, makrofunksjoner etc.) som behandles separat fra OG før SAS kompilatoren utfører SAS programmeringsspråk kode.
forskjellen mellom dem er som en forskjell mellom å lage et måltid og spise måltidet. I denne analogien måltid=kode, matlaging=SAS makro språk, spise=SAS programmeringsspråk. Klar forståelse av denne forskjellen er nøkkelen til å bli EN vellykket SAS-programmerer.
To TYPER SAS-makroer
DET finnes to forskjellige TYPER SAS-makroer:
- Makroer som genererer NOEN SAS – programmeringskode som kan strekke seg over SAS-setninger eller-trinn;
- Makroer som genererer noen strengverdier som kan brukes som en del AV SAS programmeringsspråk kode eller dataverdier, men de er ikke fullstendige SAS-setninger eller trinn. Denne typen genererer ikke NOEN SAS kjørbar kode, bare en verdi.
Hva er EN SAS-makrofunksjon?
SAS-makrofunksjon ER EN SAS-makro som genererer en verdi. Med andre ord er det type 2-makroen beskrevet ovenfor. SOM ALLE SAS-makroer kan SAS-makrofunksjoner ha et hvilket som helst tall (null eller mer) av posisjonelle eller / og navngitte parametere (argumenter). SAS-brukere kan definere sine egne makrofunksjoner, men ved å gjøre det kan du ikke bruke NOEN SAS – språksyntaks. Du kan bruke eksisterende makrofunksjoner i din egen makrofunksjon definisjon. Blant annet er en av de mektigste %SYSFUNC makrofunksjon som bringer et vell AV SAS språkfunksjoner I SAS makro språk.
Kilder TIL SAS makrofunksjoner
SAS makrofunksjoner kan komme fra følgende tre kilder.
forhåndsbygde makrofunksjoner
forhåndsbygde makrofunksjoner som er en del av makroprosessoren. Dette er slike makrofunksjoner som % eval, % lengde, % sitat, % scan, %str, %sysfunc, %upcase, etc. HER er en komplett liste over DE forhåndsbygde SAS makrofunksjonene.
auto-call makrofunksjoner
Auto-call makroer, noen av dem er type 1 (makroer) , og noen-type 2 (makrofunksjoner)som %cmpres, % left, % lowcase, %trim, %verify, etc. Disse makrofunksjonene supplerer de forhåndsbygde makrofunksjonene. Hovedforskjellen fra de forhåndsbygde makrofunksjonene er at auto-call makrofunksjonene er programprøver av de brukerdefinerte makrofunksjonene som er skrevet I SAS macro language og gjort tilgjengelig for deg uten å måtte definere eller inkludere dem i programmene dine. Makrofunksjonene for automatisk anrop følger MED SAS-programvareinstallasjonen og er vanligvis forhåndskonfigurert for DEG ved å angi ALTERNATIVENE MAUTOSOURCE og sasautos= macro system. De kan inneholde flere makrobiblioteker avhengig AV SAS-produktene som er lisensiert på nettstedet ditt. For EKSEMPEL, FOR MIN SAS BASE installasjon auto-call makrobiblioteket er i følgende mappe:
C:\Program Filer\SASHome\SASFoundation \ 9.4\core \ sasmacro
Her er en valgt liste over auto-call makroer som følger MED SAS programvare.
fra brukssynspunktet vil du ikke merke noen forskjell mellom de forhåndsbygde og auto-call makrofunksjonene. Makrofunksjon %upcase() er for eksempel forhåndsbygd, mens makrofunksjon %lowcase () er makrofunksjon for automatisk samtale. De tilhører helt forskjellige familier, men vi bruker dem som om de er komplementære søsken.
brukerdefinerte makrofunksjoner
Til Slutt er det brukerdefinerte makrofunksjoner som ikke følger MED SAS-installasjon. Dette er makrofunksjonene du definerer på egen hånd. Vanligvis holdes de separat fra auto-call-makroene, hovedsakelig for å skille DEM fra SAS-leverte.
for å aktivere tilgang til DITT EGET SAS-makrobibliotek i tillegg til det automatiske makrobiblioteket (eller biblioteker), kan DU bruke INSERT = system:
alternativer insert=(sasautos= «path_to_your_own_macro_library_folder»);
I Stedet for å erstatte sasautos-verdien, setter dette alternativet inn en tilleggsverdi i det eksisterende sasautos-alternativet som den første verdien, slik at du kan benytte deg av ditt eget makrobibliotek først, og deretter også inn i FORHÅNDSINNSTILTE SAS auto-call-biblioteker.
Opprette brukerdefinert makrofunksjon
la oss vurdere følgende eksempel. Anta at vi vil opprette en makrofunksjon som tar et datasettnavn som et argument og returnerer en verdi som er lik antall observasjoner i datasettet.
Vi vet at følgende kode beregner antall observasjoner i et datasett:
data _null_; ring symputx('NOBS',n); stopp; sett SASHELP.BILER nobs=n; run; %put &=NOBS; NOBS=428
kan VI opprette EN SAS-makrofunksjon ved å legge inn denne koden i makro? Noe som dette:
%makro nobs(dset=,resultat=); %global &resultat; data _null_; ring symputx("&resultat",n); stopp; sett &dset nobs=n; kjør;%mend nobs;
svaret er «Nei». Ja, vi opprettet en gyldig makro; vi kan påberope denne makroen for å produsere resultatet:
%nobs(dset=SASHELP.&
=NOBS; NOBS=428
Men dette er ikke en makrofunksjon. Husk type 2 makro som ikke genererer NOEN SAS programmeringssprakskode, bare en verdi? Men denne makroen genererer SAS-kode som tilordner en verdi til makrovariabelen angitt som det andre argumentet (result=NOBS).
for å opprette en gyldig makrofunksjon, bør ikke makroen vår ha NOEN SAS – språkkode i den-verken ET datatrinn eller ET PROC-trinn. DET kan bare bestå AV SAS makro språkkoden. Her er det:
%makro nobs(dset); %lokal dsid n; %la dsid = %sysfunc(åpen(&dset)); %hvis &dsid %deretter %gjøre; %la n = %sysfunc(attrn(&dsid,nlobs)); %la dsid = %sysfunc(lukk(&dsid)); %slutt; %annet %sett %sysfunc(sysmsg()); &n%reparere nobs;
når makroprosessoren utfører denne makroen, er det eneste objektet som sendes TIL SAS-språkkompilatoren verdien som vises i linjen rett før % reparere . Dette er den beregnede verdien av antall observasjoner (betegnet med &n). Dette er det eneste SOM er synlig AV SAS language compiler, resten er makrospråkkoden synlig og håndteres AV SAS macro processor.
VIKTIG: Når DU definerer SAS-makrofunksjonen, bruk alltid % local-setningen til å liste OPP alle makrovariabler som er opprettet i makroen, slik at de ikke ved et uhell overskriver makrovariabler med samme navn i anropsmiljøet. Du trenger ikke å deklarere % lokal for makroparametere, da de alltid er lokale automatisk.
SAS makrofunksjoner bruk eksempler
når en makrofunksjon er definert på denne måten, uansett hvor du plasserer sin påkallelse %nobs (SASHELP.BILER) i SAS-koden din vil DEN bli evaluert og erstattet med tilsvarende verdi (i dette tilfellet er det nummer 428) av SAS-makroprosessoren. På den måten kan du unngå substandard hard-koding og gjøre SAS-koden dynamisk og kraftig. Du kan bruke makrofunksjoner i MANGE SAS-kodingskontekster. For eksempel:
- Tildelingsuttrykk for makrovariabel: % let NOBS=%nobs (SASHELP.I ET datatrinn: x = %nobs (SASHELP.BILER);
- som en del av et uttrykk i et datatrinn: x = %nobs (SASHELP.BILER) / 2 + 3;
- som en verdi av EN data trinn do loop: gjør jeg = 1 til %nobs (SASHELP.SOM en verdi av en makro gjør loop: % do &i=1% til %nobs (SASHELP.BILER);
- som en del av tilstanden I IF-setningen: if %nobs (SASHELP.BILER) > 500 så gjør;
Og Så videre. Det er viktig å merke seg at argumenter (parametere) til makrofunksjoner må VÆRE ENTEN SAS-konstanter eller makrouttrykk løse TIL SAS-konstanter. Siden makrofunksjoner blir løst av makroprosessoren før SAS – programkjøring, kan argumentene ikke være variabelnavn. Dette er hovedforskjellen mellom makrofunksjoner og SAS-funksjoner.
dine tanker?
finner du dette innlegget nyttig? Bruker DU SAS makrofunksjoner? Kan du foreslå andre brukseksempler? Vennligst del med oss i Kommentarene nedenfor.