Aanbevelingen

SAS heeft een krachtige programmeerfunctie, Macro’s genaamd, die ons in staat stelt om herhalende delen van code te vermijden en ze steeds opnieuw te gebruiken wanneer dat nodig is. Het helpt ook om dynamische variabelen binnen de code te creëren die verschillende waarden kunnen aannemen voor verschillende instanties van dezelfde code. Macro’s kunnen ook worden gedeclareerd voor blokken code die meerdere malen zullen worden hergebruikt op een vergelijkbare manier als macrovariabelen. We zullen beide in de onderstaande voorbeelden zien.

Macrovariabelen

Dit zijn de variabelen die een waarde bevatten die steeds opnieuw door een SAS-programma kan worden gebruikt. Zij worden aan het begin van een SAS-programma gedeclareerd en later in de body van het programma opgeroepen. Ze kunnen globaal of lokaal zijn.

Globale Macro Variabele

Ze worden globale macro variabelen genoemd omdat ze door elk SAS programma in de SAS omgeving kunnen worden gebruikt. In het algemeen zijn het de aan het systeem toegewezen variabelen die door meerdere programma’s kunnen worden gebruikt. Een algemeen voorbeeld is de systeemdatum.

Voorbeeld

Hieronder volgt een voorbeeld van de SAS-variabele met de naam SYSDATE die de systeemdatum weergeeft. Overweeg een scenario om de systeemdatum af te drukken in de titel van het SAS rapport elke dag dat het rapport wordt gegenereerd. De titel zal de huidige datum en dag tonen zonder dat we er waarden voor coderen. We gebruiken de ingebouwde SAS-dataset genaamd CARS die beschikbaar is in de SASHELP-bibliotheek.

proc print data = sashelp.cars;where make = 'Audi' and type = 'Sports' ; TITLE "Sales as of &SYSDAY &SYSDATE";run;

Wanneer de bovenstaande code wordt uitgevoerd, krijgen we de volgende uitvoer.

Local Macro variable

Deze variabelen zijn toegankelijk voor SAS-programma’s waarin ze worden gedeclareerd als onderdeel van het programma. Ze worden gewoonlijk gebruikt om verschillende variabelen aan dezelfde SAS-statements te geven, zodat ze verschillende waarnemingen van een gegevensverzameling kunnen verwerken.

Syntax

De lokale variabelen worden gedeclareerd met de onderstaande syntaxis.

% LET (Macro Variable Name) = Value;

Hier kan het veld Waarde elke numerieke, tekst- of datumwaarde aannemen die door het programma wordt vereist. De naam van de macro-variabele is een willekeurige geldige SAS-variabele.

Voorbeeld

De variabelen worden door de SAS-statements gebruikt met behulp van het teken & dat aan het begin van de variabelenaam wordt toegevoegd. Onderstaand programma geeft ons alle waarnemingen van het merk “Audi” en type “Sport”. Indien wij het resultaat van een ander merk willen, moeten wij de waarde van de variabele make_name veranderen zonder enig ander deel van het programma te veranderen. In het geval van bring programma’s kan naar deze variabele worden verwezen in alle 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;

Wanneer de bovenstaande code wordt uitgevoerd krijgen we dezelfde uitvoer als in het vorige programma. Maar laten we de naam van het type veranderen in ‘Wagon’ en hetzelfde programma uitvoeren. We krijgen dan het onderstaande resultaat.

Macroprogramma’s

Macro is een groep SAS-statements die met een naam wordt aangeduid en overal in programma’s kan worden gebruikt, met die naam. Het begint met een %MACRO-instructie en eindigt met een %MEND-instructie.

Syntax

De lokale variabelen worden met onderstaande syntaxis gedeclareerd.

# Creating a Macro program.%MACRO <macro name>(Param1, Param2,….Paramn);Macro Statements;%MEND;# Calling a Macro program.%MacroName (Value1, Value2,…..Valuen);

Voorbeeld

Het onderstaande programma decaleert een groep SAT-statemnets onder een macro met de naam ‘show_result’; deze macro wordt door andere SAS-instructies aangeroepen.

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

Wanneer de bovenstaande code wordt uitgevoerd, krijgen we de volgende uitvoer.

Commonly Used Macros

SAS heeft veel MACRO-statements die in de SAS-programmeertaal zijn ingebouwd. Ze worden door andere SAS programma’s gebruikt zonder ze expliciet te declareren. Veel voorkomende voorbeelden zijn – het beëindigen van een programma wanneer aan een bepaalde voorwaarde is voldaan of het vastleggen van de runtime waarde van een variabele in het programmalogboek. Hieronder vindt u enkele voorbeelden.

Macro %PUT

Deze macro-instructie schrijft informatie over tekst of macrovariabelen naar het SAS-logboek. In het onderstaande voorbeeld wordt de waarde van de variabele “today” naar het programmalogboek geschreven.

data _null_;CALL SYMPUT ('today',TRIM(PUT("&sysdate"d,worddate22.)));run;%put &today;

Wanneer bovenstaande code wordt uitgevoerd, krijgen we de volgende uitvoer.

Macro %RETURN

Uitvoering van deze macro zorgt voor normale beëindiging van de macro die op dat moment wordt uitgevoerd wanneer een bepaalde voorwaarde waar blijkt te zijn. In het onderstaande voorbeeld wordt de macro beëindigd wanneer de waarde van de variabele “val” 10 wordt, anders gaat hij door.

%macro check_condition(val); %if &val = 10 %then %return; data p; x = 34.2; run; %mend check_condition; %check_condition(11) ;

Wanneer de bovenstaande code wordt uitgevoerd, krijgen we de volgende uitvoer.

Macro %END

Deze macrodefinitie bevat een %DO %WHILE-lus die, zoals vereist, eindigt met een %END-instructie. In het onderstaande voorbeeld neemt de macro met de naam test een gebruikersinvoer en voert de DO-lus uit met deze invoerwaarde.Het einde van de DO-lus wordt bereikt door de %end-instructie terwijl het einde van de macro wordt bereikt door de %mend-instructie.

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

Wanneer de bovenstaande code wordt uitgevoerd, krijgen we de volgende uitvoer.

Advertenties

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.