SAS har en kraftfull programmeringsfunktion som kallas för Makroer och som gör det möjligt för oss att undvika repetitiva avsnitt i koden och att använda dem om och om igen när det behövs. Det hjälper också till att skapa dynamiska variabler i koden som kan anta olika värden för olika körningar av samma kod. Makroer kan också deklareras för kodblock som kommer att återanvändas flera gånger på samma sätt som makrovariabler. Vi kommer att se båda dessa i nedanstående exempel.
Makrovariabler
Dessa är de variabler som innehåller ett värde som ska användas om och om igen av ett SAS-program. De deklareras i början av ett SAS-program och anropas senare i programkroppen. De kan ha global eller lokal räckvidd.
Global makrovariabel
De kallas globala makrovariabler eftersom de kan nås av alla SAS-program som finns i SAS-miljön. I allmänhet är de systemtilldelade variabler som nås av flera program. Ett allmänt exempel är systemdatum.
Exempel
Nedan följer ett exempel på SAS-variabeln SYSDATE som representerar systemdatumet. Tänk på ett scenario där man vill skriva ut systemdatumet i titeln på SAS-rapporten varje dag som rapporten genereras. Titeln kommer att visa det aktuella datumet och dagen utan att vi kodar några värden för dem. Vi använder den inbyggda SAS-datamängden CARS som finns i biblioteket SASHELP.
proc print data = sashelp.cars;where make = 'Audi' and type = 'Sports' ; TITLE "Sales as of &SYSDAY &SYSDATE";run;
När ovanstående kod körs får vi följande utdata.
Lokal makrovariabel
De här variablerna kan nås av SAS-program där de deklareras som en del av programmet. De används vanligtvis för att tillhandahålla olika varaibels till samma SAS-utsagor så att de kan bearbeta olika observationer av en datamängd.
Syntax
De lokala variablerna är dekalerade med nedanstående syntax.
% LET (Macro Variable Name) = Value;
Här kan fältet Value (värde) ta emot ett valfritt numeriskt, text- eller datavärde som krävs av programmet. Makrovariabelns namn är en giltig SAS-variabel.
Exempel
Variablerna används av SAS-anvisningarna med hjälp av &-tecknet i början av variabelnamnet. Nedanstående program ger oss alla observationer av märket ”Audi” och typen ”Sports”. Om vi vill ha resultatet för ett annat märke måste vi ändra värdet på variabeln make_name utan att ändra någon annan del av programmet. När det gäller bring-program kan denna variabel refereras om och om igen i alla SAS-statements.
%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 ovanstående kod körs får vi samma utdata som i det föregående programmet. Men låt oss ändra typnamnet till ”Wagon” och köra samma program. Vi får nedanstående resultat.
Makroprogram
Makro är en grupp SAS-utsagor som refereras till med ett namn och för att använda den i programmet var som helst, använd det namnet. Det börjar med en %MACRO-angivelse och slutar med %MEND-angivelsen.
Syntax
De lokala variablerna deklareras med nedanstående syntax.
# Creating a Macro program.%MACRO <macro name>(Param1, Param2,….Paramn);Macro Statements;%MEND;# Calling a Macro program.%MacroName (Value1, Value2,…..Valuen);
Exempel
Det nedanstående programmet dekarrerar en grupp av SAS-statemnets under ett makro med namnet ’show_result’; Detta makro anropas av andra SAS-angivelser.
%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 ovanstående kod körs får vi följande utdata.
Högst använda makron
SAS har många MACRO-angivelser som är inbyggda i SAS programmeringsspråk. De används av andra SAS-program utan att uttryckligen deklarera dem.Vanliga exempel är – att avsluta ett program när något villkor är uppfyllt eller att fånga körtidsvärdet för en variabel i programloggen. Nedan följer några exempel.
Makro %PUT
Denna makroangivelse skriver text- eller makrovariabelinformation till SAS-loggen. I exemplet nedan skrivs värdet av variabeln ”today” till programloggen.
data _null_;CALL SYMPUT ('today',TRIM(PUT("&sysdate"d,worddate22.)));run;%put &today;
När ovanstående kod körs får vi följande utdata.
Macro %RETURN
Exekvering av det här makrot orsakar ett normalt avslut av det pågående makrot när ett visst villkor utvärderas som sant. I exemplet nedan när värdet på variabeln ”val” blir 10 avslutas makrot, annars fortsätter det.
%macro check_condition(val); %if &val = 10 %then %return; data p; x = 34.2; run; %mend check_condition; %check_condition(11) ;
När ovanstående kod körs får vi följande utdata.
Macro %END
Denna makrodefinition innehåller en %DO %WHILE-slinga som avslutas med en %END-angivelse. I nedanstående exempel tar makronamnet test emot en användarinmatning och kör DO-slingan med hjälp av detta inmatningsvärde. slutet på DO-slingan uppnås genom %end-angivelsen medan slutet på makronamnet uppnås genom %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 koden ovan körs får vi följande utdata.