Eigene Makrofunktionen in SAS 8.2
Hallo Zusammen,
ich bin auf der Suche nach einer Moeglichkeit eigene Makrofunktionen in SAS 8.2 zu erstellen.
Dieses wuerde ich gerne an folgendem einfachen Bsp der Flaechenberechnung aus 2 Groessen (Laenge und Breite) diskutieren:
Meine Grundidee (nicht lauffaehig) war:
input laenge breite;
datalines;
10 20
30 40
50 60
;
%macro flaecheberechnen(la, br);
flaecheberechnen = la * br;
???
run;
%mend flaecheberechnen;
data grunddatenmitflaeche;
set grunddaten;
flaeche = '%flaecheberechnen(' || laenge || ',' || breite ||')';
run;
In Anlehnung an die Online-Dokumente zu SAS habe ich den Code wie unten veraendert. Diese Variante ist bei mir lauffaehig, allerdings steht am Ende in der Tabelle grunddatenmitflaeche in Spalte flaeche bei allen Datensaetzen immer das letzte Ergebnis 3000 anstelle des jeweils korrekten Ergebnisses (200, 1200, 3000). Entsprechend der Dokumentation ist dieser Ansatz wohl auch nicht zu gebrauchen. Ich gebe ihn hier um meinen aktuellen Stand bei der Codeentwicklung zu zeigen.
input laenge breite;
datalines;
10 20
30 40
50 60
;
%macro flaecheberechnen(la, br);
%global ergebnis;
data _null_;
fl = %eval(&la * &br);
call symput('ergebnis',fl);
run;
%mend flaecheberechnen;
data _null_;
set grunddaten;
call execute('%flaecheberechnen(' || laenge || ',' || breite ||')');
run;
data grunddatenmitflaeche;
set grunddaten;
flaeche=symget('ergebnis');
run;
Es geht mir in diesem Bsp nicht darum, dass die Berechnung der Flaeche problemlos in der Data-Anweisung durchgefuehrt werden koennte, sondern darum zu verstehen, ob und wie eigene Makrofunktionen erstellt werden koennen.
Dazu folgende Fragen:
-) Ist es in SAS 8.2 aehnlich (oder ganz anders) moeglich, eigene Makrofunktionen zu erstellen?
-) Falls nicht in 8.2, ist es dann in einer neueren SAS-Version moeglich?
Viele Gruesse und vielen Dank fuer die Bemuehungen
R. Sievert
- Anmelden oder Registrieren um Kommentare zu schreiben

Makros sind viel einfacher
&la * &br
run;
%mend flaecheberechnen;
data grunddatenmitflaeche;
set grunddaten;
flaeche = %flaecheberechnen(laenge, breite);
run;
Herzlichen Dank
Herzlichen Dank Herr Mangold, das habe ich gesucht.
Bei meiner Suche in der Doku bin ich wohl mächtig auf den Holzweg geraten.