SAS har en kraftfuld programmeringsfunktion kaldet makroer, som gør det muligt at undgå gentagne kodeafsnit og at bruge dem igen og igen, når det er nødvendigt. Det er også med til at skabe dynamiske variabler i koden, som kan antage forskellige værdier for forskellige kørselsinstanser af den samme kode. Makroer kan også deklareres for blokke af kode, som vil blive genbrugt flere gange på samme måde som makrovariabler. Vi vil se begge dele i nedenstående eksempler.
Makrovariabler
Dette er de variabler, som indeholder en værdi, der skal bruges igen og igen af et SAS-program. De deklareres i begyndelsen af et SAS-program og kaldes senere i programmets krop. De kan være Globale eller Lokale i omfang.
Globale makrovariable
De kaldes globale makrovariabler, fordi de kan tilgås af ethvert SAS-program, der er tilgængeligt i SAS-miljøet. Generelt er de de systemtildelte variabler, som der er adgang til af flere programmer. Et generelt eksempel er systemdatoen.
Eksempel
Nedenfor er et eksempel på SAS-variablen kaldet SYSDATE, som repræsenterer systemdatoen. Overvej et scenarie, hvor systemdatoen skal udskrives i titlen på SAS-rapporten hver dag, rapporten genereres. Titlen vil vise den aktuelle dato og dag uden at vi koder nogen værdier for dem. Vi bruger det indbyggede SAS-datasæt kaldet CARS, der er tilgængeligt i SASHELP-biblioteket.
proc print data = sashelp.cars;where make = 'Audi' and type = 'Sports' ; TITLE "Sales as of &SYSDAY &SYSDATE";run;
Når ovenstående kode køres, får vi følgende output.
Lokal makrovariabel
Disse variabler kan tilgås af SAS-programmer, hvor de er deklareret som en del af programmet. De bruges typisk til at levere forskellige varaibels til de samme SAS-udsagn sl at de kan behandle forskellige observationer af et datasæt.
Syntaks
De lokale variabler er dekaleret med nedenstående syntaks.
% LET (Macro Variable Name) = Value;
Her kan Value-feltet tage enhver numerisk, tekst- eller datoværdi som krævet af programmet. Makrovariabelnavnet er en hvilken som helst gyldig SAS-variabel.
Eksempel
Variablerne anvendes af SAS-udsagnene ved hjælp af &-tegnet, der er vedhæftet i begyndelsen af variabelnavnet. Nedenstående program får os alle observationer af mærket “Audi” og typen “Sport”. Hvis vi ønsker resultatet for et andet mærke, skal vi ændre værdien af variablen make_name uden at ændre andre dele af programmet. I tilfælde af at bringe programmer kan der henvises til denne variabel igen og igen i alle SAS-udsagn.
%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;
Når ovenstående kode køres, får vi det samme output som i det foregående program. Men lad os ændre typenavnet til “Wagon” og køre det samme program. Vi får nedenstående resultat.
Makroprogrammer
Makro er en gruppe af SAS-angivelser, der refereres til med et navn, og for at bruge den i programmet hvor som helst, skal du bruge dette navn. Det starter med en %MACRO-anvisning og slutter med %MEND-anvisning.
Syntaks
De lokale variabler er deklareret med nedenstående syntaks.
# Creating a Macro program.%MACRO <macro name>(Param1, Param2,….Paramn);Macro Statements;%MEND;# Calling a Macro program.%MacroName (Value1, Value2,…..Valuen);
Eksempel
Det nedenstående program decalrerer en gruppe af SAT staemnets under en makro ved navn ‘show_result’; Denne makro bliver kaldt af andre SAS-anvisninger.
%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);
Når ovenstående kode køres, får vi følgende output.
Hyppigt anvendte makroer
SAS har mange MACRO-angivelser, som er indbygget i SAS-programmeringssproget. De bruges af andre SAS-programmer uden eksplicit deklaration af dem. almindelige eksempler er – afslutning af et program, når en bestemt betingelse er opfyldt, eller registrering af en variabels runtime-værdi i programloggen. Nedenfor er nogle eksempler.
Makro %PUT
Denne makroanvisning skriver tekst- eller makrovariabelinformation til SAS-loggen. I nedenstående eksempel skrives værdien af variablen “today” til programloggen.
data _null_;CALL SYMPUT ('today',TRIM(PUT("&sysdate"d,worddate22.)));run;%put &today;
Når ovenstående kode køres, får vi følgende output.
Makro %RETURN
Udførelsen af denne makro medfører normal afslutning af den aktuelt udførte makro, når en bestemt betingelse evalueres som værende sand. I nedenstående eksempelnår værdien af variablen “val” bliver 10, afsluttes makroen, ellers fortsætter den.
%macro check_condition(val); %if &val = 10 %then %return; data p; x = 34.2; run; %mend check_condition; %check_condition(11) ;
Når ovenstående kode køres, får vi følgende output.
Makro %END
Denne makrodefinition indeholder en %DO %WHILE-sløjfe, der som krævet afsluttes med en %END-angivelse. I nedenstående eksempel tager makroen med navnet test et brugerinput og kører DO-loopet ved hjælp af denne inputværdi. slutningen af DO-loopet opnås ved hjælp af %end-angivelsen, mens slutningen af makroen opnås ved hjælp af %mend-angivelsen.
%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)
Når ovenstående kode køres, får vi følgende output.