SAS-Makro-Programmierung: - Urz

SAS-Makro-Programmierung: - Urz SAS-Makro-Programmierung: - Urz

web.urz.uni.heidelberg.de
von web.urz.uni.heidelberg.de Mehr von diesem Publisher
12.07.2015 Aufrufe

Aufruf:%frage(1, co.iris)%frage(Unsinn, co.iris) Falls die Variable aaa den Wert 1 annimmt, wird die Prozedur Print verwendet. Falls die Variable aaa einen anderen Wert als 1 zugewiesen bekommt, wird die ProzedurContents ausgeführt.Übungsaufgabe13. Erzeugen Sie ein Makro NUMMER, das zuerst abfragt, welchen Datensatz Sie bearbeitenwollen, und danach folgenden Text im Log-Fenster erzeugt:Wählen Sie eine der beiden Möglichkeiten:Ausdruck (geben Sie eine 1 ein)Mittelwerte (geben Sie eine 2 ein).Je nachdem, welche Entscheidung der Benutzer getroffen hat, soll nun entweder ProcPrint oder Proc Means ausgeführt werden. Kommentieren Sie das Makro entsprechendseinen Programmteilen.5.6 %Do - %To - %End-Anweisung (Iterative %Do-Anweisung)Die %Do-%To-%End-Anweisung führt bis zu einem definierten Endpunkt immer wieder diegleichen Programmteile aus. Man spricht von iterativen %Do-Schleifen (loops).Iterative %Do-Schleifen sind nicht mit %while und %until verknüpfbar.Syntax:%do Makrovariable=Start %to Stop ;Text und Makro-Programmanweisungen%end;MakrovariableBenennt eine Makrovariable, deren Wert die Anzahl der %Do-Schleifen regelt.Existiert diese Indexvariable noch nicht, wird sie vom Makro-Prozessorangelegt.start Startpunkt der %Do-Schleifen, muß ganzzahlig sein.stop Endpunkt der %Do-Schleifen, muß ganzzahlig seinInkrement Mit der optionalen %by-Anweisung kann vereinbart werden, in welchenSchritten die %DO-Schleife ausgeführt wird (Standard=1).Beispiel 1: %macro create;%do i=1 %to 3;data monat&i;infile in&i;input produkt kosten datum;run;%end;%mend create;Aufruf: %create;Ergebnis: data monat1;infile in1;input produkt kosten datum;run;data monat2;22

infile in2;input produkt kosten datum;run;data monat3;infile in3;input produkt kosten datum;run;Die %do-Schleife wird 3 mal hintereinander ausgeführt. Die Indexvariable i wird in jedemDurchgang um das Inkrement 1 erhöht.Es ist auch möglich %Do-Schleifen zu verschachteln:Beispiel 2: %macro create2;%do jahr=90 %to 92;%do mon=1 %to 12;data dat_&jahr&mon;infile in&jahr&mon;input person umsatz zeit;run;%end;%end;%mend create2;Aufruf: %create2;Die Schleife wird 36 mal(3*12) durchgeführt, und erzeugt für jeden Monat der Jahre 90 bis 92 einenDatenschritt (siehe Ergebnis des ersten Beispiels).5.7 %Do - %Until - %End-AnweisungDie %Do - %Until -Anweisung führt die %Do-Schleife so lange aus, bis eine zuvor vereinbarteBedingung erfüllt ist.Syntax:Beispiel:Aufruf:%do %until (Ausdruck);Text und Makro-Programmanweisungen%end;%macro tue_bis(num);%put Start Macro tue_bis: num ist #%do %until(&num>10);%put ****&num****;%let num=%eval(&num+1);%end;%put Ende Macro tue_bis: num ist #%mend tue_bis;%tue_bis(-23)In unserem Beispiel soll die %do-%until-Schleife so lange ausgeführt werden, bis die VariableNUM größer als 10 ist. Nach jedem Durchgang bekommt die Variable NUM mit Hilfe der %eval-Funktion (siehe Kap. 6.2) zu ihrem Ausgangswert (im Beispiel -23) eine 1 aufaddiert, und erhältsomit einen neuen Wert. In dem Moment, in dem dieser Wert größer als 10 (also bei 11) gewordenist, bricht das Makro ab und es erscheint die Meldung, daß das Makro beendet ist.5.8 %Do - %While - %End-Anweisung23

Aufruf:%frage(1, co.iris)%frage(Unsinn, co.iris) Falls die Variable aaa den Wert 1 annimmt, wird die Prozedur Print verwendet. Falls die Variable aaa einen anderen Wert als 1 zugewiesen bekommt, wird die ProzedurContents ausgeführt.Übungsaufgabe13. Erzeugen Sie ein <strong>Makro</strong> NUMMER, das zuerst abfragt, welchen Datensatz Sie bearbeitenwollen, und danach folgenden Text im Log-Fenster erzeugt:Wählen Sie eine der beiden Möglichkeiten:Ausdruck (geben Sie eine 1 ein)Mittelwerte (geben Sie eine 2 ein).Je nachdem, welche Entscheidung der Benutzer getroffen hat, soll nun entweder ProcPrint oder Proc Means ausgeführt werden. Kommentieren Sie das <strong>Makro</strong> entsprechendseinen Programmteilen.5.6 %Do - %To - %End-Anweisung (Iterative %Do-Anweisung)Die %Do-%To-%End-Anweisung führt bis zu einem definierten Endpunkt immer wieder diegleichen Programmteile aus. Man spricht von iterativen %Do-Schleifen (loops).Iterative %Do-Schleifen sind nicht mit %while und %until verknüpfbar.Syntax:%do <strong>Makro</strong>variable=Start %to Stop ;Text und <strong>Makro</strong>-Programmanweisungen%end;<strong>Makro</strong>variableBenennt eine <strong>Makro</strong>variable, deren Wert die Anzahl der %Do-Schleifen regelt.Existiert diese Indexvariable noch nicht, wird sie vom <strong>Makro</strong>-Prozessorangelegt.start Startpunkt der %Do-Schleifen, muß ganzzahlig sein.stop Endpunkt der %Do-Schleifen, muß ganzzahlig seinInkrement Mit der optionalen %by-Anweisung kann vereinbart werden, in welchenSchritten die %DO-Schleife ausgeführt wird (Standard=1).Beispiel 1: %macro create;%do i=1 %to 3;data monat&i;infile in&i;input produkt kosten datum;run;%end;%mend create;Aufruf: %create;Ergebnis: data monat1;infile in1;input produkt kosten datum;run;data monat2;22

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!