SAS-Makro-Programmierung: - Urz
SAS-Makro-Programmierung: - Urz SAS-Makro-Programmierung: - Urz
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
- Seite 1 und 2: Universitätsrechenzentrum Heidelbe
- Seite 3 und 4: 6.1.5 %UPCASE- UND %QUPCASE-FUNKTIO
- Seite 5 und 6: LegendeSAS-Schlüsselworte, -Anweis
- Seite 7 und 8: Makrovariablen unterscheiden sich g
- Seite 9 und 10: 2.2 Benutzerdefinierte Makrovariabl
- Seite 11 und 12: %let vname=hans;%let name=&vname Sc
- Seite 13 und 14: • definieren lokale Makrovariable
- Seite 15 und 16: 4. Lokale und globale Makrovariable
- Seite 17 und 18: Dies bedeutet, daß der Makro-Proze
- Seite 19 und 20: Makro-Programmanweisungen sind die
- Seite 21: %put &name;%mend vornach; Der Makro
- Seite 25 und 26: un;%kurz: proc print data=_last_(ob
- Seite 27 und 28: Fenstername benennt das Fenster und
- Seite 29 und 30: PROTECT=YES|NOFalls Sie PROTECT=YES
- Seite 31 und 32: Bild 2: Makro DISP zeigt beide Grup
- Seite 33 und 34: 6.1 Funktionen zur Bearbeitung von
- Seite 36 und 37: Beispiel 1: %macro Verglei;%put Geb
- Seite 38 und 39: Beispiele:%let wert=%eval(50+60);%p
- Seite 41 und 42: Aufruf:%end;%put Ergebnis: &wert1 &
- Seite 43 und 44: 7. Berührungspunkte zwischen Makro
- Seite 45 und 46: Die Ausprägung der Variable muß e
- Seite 47 und 48: 7.1.3 Resolve-FunktionDiese Funktio
- Seite 49 und 50: Syntax:call execute(argument);Das a
- Seite 51 und 52: 8.1 Named styled Makros"Named style
- Seite 53 und 54: SystemoptionErklärungmautosource/B
- Seite 55 und 56: 9.3 Allgemeine SystemoptionenSystem
- Seite 57 und 58: Lösungvorschläge zu den Übungsau
- Seite 59 und 60: Proc print data=&sds;run;%end;%* Fa
- Seite 61 und 62: %put Fügen sie die Fehlermeldung
- Seite 63 und 64: Welcher SAS-Code wird mit folgenden
- Seite 65 und 66: 11. Schreiben Sie ein Makro PLOTTER
- Seite 67 und 68: Makro-Programmanweisungen .... 7; 1
- Seite 69 und 70: 8ÔI’d){(oœXŒ1l)os,s->Š m?&˜$
- Seite 71 und 72: "%r({› &m?s/)-(oš4&(u¢W"]3I-8£
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