Beispiele:%let wert=%eval(50+60);%put Der wert ist:&wert;%let x=50;%let y=60;%let wert=%eval(&x+&y);%put Der wert ist:&wert;%let wert=%eval(&x+&y/11);%put Der wert ist:&wert;%let wert=%eval((&x+&y)/11);%put Der wert ist:&wert;Ergebnisse:Der wert ist:110Der wert ist:110Der wert ist:55(sollte eigentlich 55,4545 sein, die %eval-Funktion rundet aber immer ab)Der wert ist:10Übungsaufgaben18. Lassen Sie sich mit Hilfe von <strong>Makro</strong>funktionen ihren Namen in Großbuchstaben ausgeben unddie Anzahl der Buchstaben.19. Erstellen Sie ein <strong>Makro</strong> INTSUM, das die Zahlen von 1 bis N aufsummiert, wobei N alsArgument mitgegeben wird und das <strong>Makro</strong> nur das Ergebnis zurückgeben soll (Tip: Die Formeldazu lautet n(n+1)/2).a) Rufen sie das <strong>Makro</strong> mit N=10 in einer %let-Anweisung und weisen Sie das Ergebnis derVariable TOTAL zu, die mit einem anschließenden %put ausgegeben wird.b) Behandeln sie das <strong>Makro</strong> wie eine Funktion, indem Sie das Ergebnis in einem Datenschritt einerVariable SUM zuweisen und mit put (nicht %put) ausgegeben.c) Schreiben Sie ein <strong>Makro</strong> GETSUM (ohne Parameter), das das <strong>Makro</strong> INTSUM als Funktionverwendet, indem INTSUM in einem Datenschritt für die Werte N=1, 2, 3, 4 und 5 aufgerufenwird. GETSUM soll den gesamten Datenschritt mitsamt PUT-Anweisungen zur Ausgabe derErgebnisse erzeugen.d) Erweitern Sie das <strong>Makro</strong> GETSUM durch Aufrufparameter, die das erste und letzte N angeben,für die die Summen gebildet werden sollen und eventuell die Zwischenschritte (Inkrements)(Tip: %Do-Schleife).6.3 Funktionen zur Bearbeitung von speziellen Zeichen (Textfunktionen)Da bestimmte Textzeichen, wie z.B. Prozentzeichen, Semikolon oder Anführungszeichen für den<strong>Makro</strong>-Prozessor eine andere Bedeutung haben, bzw. der <strong>Makro</strong>-Prozessor anders darauf reagiert,als im normalen <strong>SAS</strong>-System, bedarf es spezieller Funktionen, der Quoting-Funktionen, um deren"normale" Bedeutung innerhalb des <strong>Makro</strong>systems zu erzielen, und sie als Teil des Textes zuinterpretieren.Folgende Zeichen werden vom <strong>Makro</strong>-Prozessor nicht als Textzeichen interpretiert:Zeichen Bedeutung; Ende einer Anweisung, Trennung von Argumenten einer Funktion/ eines <strong>Makro</strong>s&, %Referenz auf <strong>Makro</strong>- Variablen und -Aufruf+,-,*,/, u.ä. werden als arithmetische und Vergleichsoperatoren erkanntLT, NE, u.ä. werden als logische Operatoren erkanntLeerzeichen nicht unterdrücken38
Übersicht über die Textfunktionen:Funktion Berücksichtigte Zeichen Beschreibung%str ; , + - * / ** | = LT quotiert konstanten Text zur Zeit derLE u.ä.Kompilierung%nrstr s.o., zusätzlich % und & s.o.%quote ; , + - * / ** | = LT quotiert konstanten Text zur Zeit derLE u.ä.<strong>Makro</strong>-Ausführung%bquote siehe %quote, zusätzlich offene s.o.Anführungszeichen & Klammern(unmatched)%nrquote siehe %quote, zusätzlich % und & s.o.%nrbquote vereinigt die Funktionen von s.o.%bquote und %nrquote%unquote löst Quotierungen wieder auf löst Quotierungen zur Zeit der<strong>Makro</strong>-Ausführung wieder auf%superq & und % verhindert das Auflösen von<strong>Makro</strong>ausdrücken bei der Auflösungvon <strong>Makro</strong>variablen.6.3.1 %Quote-FunktionDie %quote-Funktion quotiert während der <strong>Makro</strong>-Ausführung konstanten Text. Die Funktionentfernt allerdings nicht die Bedeutung von Hochkommata, Klammern oder <strong>Makro</strong>hinweiszeichen,wie % und &.Syntax:Beispiel:%quote(Argument)%macro dept1(bdl);%if %quote(&bdl)=bw %then %put Bundesland BadenWürttemberg;%else %put Bundesland;%mend dept1;6.3.2 %Bquote-FunktionDie Funktion verarbeitet Argumente, die besondere Zeichen enthalten, welche der <strong>Makro</strong>-prozessornormalerweise nicht als Textzeichen interpretieren würde, z.B. offene Anführungs-zeichen undKlammern.Syntax:Beispiel:Aufruf:%bquote(Argument)%macro bq;%global platz;%put Geben Sie den Treffpunkt ein.;%input;%let platz=%bquote(&sysbuffr);%put &platz;%mend bq;%bqEingabe: Rick's Café39