Advertiser

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.

Advertisements

Lämna ett svar

Din e-postadress kommer inte publiceras.