proc Means mit Macro automatisieren

Hallo Zusammen,

ich habe mir folgende Makros überlegt. Wobei nur Makro Kennwerte3 funktioniert und Kennwerte2 leider nicht. Aber warum? Wo liegt mein Fehler?

Vielleicht hat ja jemand einen Ratschlag parat. Danke!

Alex

%macro Kennwerte2(Analysedaten=IN, Suffix=Suffix, Merkmal1=M1, Merkmal2=M2);
proc Means data=&IN noprint;
class &M1 &M2;
var n_vn sum_ln sum_ld sum_lct sum_vd;
Types &M1*&M2;
output out=&IN&Suffix
median=median_vn median_ln median_ld median_lct median_vd
mean=mean_vn mean_ln mean_ld mean_lct mean_vd
sum=sum_vn sum_ln sum_ld sum_lct sum_vd
QRange=IQR_vn IQR_ln IQR_ld IQR_lct IQR_vd
std=std_vn std_ln std_ld std_lct std_vd;
run;
%mend;

%macro Kennwerte3(IN, Suffix, M1, M2);
proc Means data=&IN noprint;
class &M1 &M2;
var n_vn sum_ln sum_ld sum_lct sum_vd;
Types &M1*&M2;
output out=&IN&Suffix
median=median_vn median_ln median_ld median_lct median_vd
mean=mean_vn mean_ln mean_ld mean_lct mean_vd
sum=sum_vn sum_ln sum_ld sum_lct sum_vd
QRange=IQR_vn IQR_ln IQR_ld IQR_lct IQR_vd
std=std_vn std_ln std_ld std_lct std_vd;
run;
%mend;

%Kennwerte2(Analysedaten=Gtyp_A_h_Free_KW_48h, Suffix=_stat5, Merkmal1=Gtyp, Merkmal2=Animal);
%Kennwerte3(Gtyp_A_h_Free_KW_48h, _stat6, Gtyp, Animal);

1045
1046 %macro Kennwerte2(Analysedaten=IN, Suffix=Suffix, Merkmal1=M1, Merkmal2=M2);
1047 proc Means data=&IN noprint;
1048 class &M1 &M2;
1049 var n_vn sum_ln sum_ld sum_lct sum_vd;
1050 Types &M1*&M2;
1051 output out=&IN&Suffix
1052 median=median_vn median_ln median_ld median_lct median_vd
1053 mean=mean_vn mean_ln mean_ld mean_lct mean_vd
1054 sum=sum_vn sum_ln sum_ld sum_lct sum_vd
1055 QRange=IQR_vn IQR_ln IQR_ld IQR_lct IQR_vd
1056 std=std_vn std_ln std_ld std_lct std_vd;
1057 run;
1058 %mend;
1059
1060 %macro Kennwerte3(IN, Suffix, M1, M2);
1061 proc Means data=&IN noprint;
1062 class &M1 &M2;
1063 var n_vn sum_ln sum_ld sum_lct sum_vd;
1064 Types &M1*&M2;
1065 output out=&IN&Suffix
1066 median=median_vn median_ln median_ld median_lct median_vd
1067 mean=mean_vn mean_ln mean_ld mean_lct mean_vd
1068 sum=sum_vn sum_ln sum_ld sum_lct sum_vd
1069 QRange=IQR_vn IQR_ln IQR_ld IQR_lct IQR_vd
1070 std=std_vn std_ln std_ld std_lct std_vd;
1071 run;
1072 %mend;
1073
1074
1075 %Kennwerte2(Analysedaten=Gtyp_A_h_Free_KW_48h, Suffix=_stat5, Merkmal1=Gtyp,
1075! Merkmal2=Animal);
HINWEIS: Zeile durch aufgerufenes Makro "KENNWERTE2" erzeugt.
1 proc Means data=&IN noprint; class &M1 &M2; var n_vn sum_ln sum_ld sum_lct sum_vd;
-
22
--
202
1 ! Types &M1*&M2; output out=&IN&Suffix median=median_vn median_ln median_ld median_lct
1 ! median_vd mean=mean_vn mean_ln mean_ld mean_lct mean_vd sum=sum_vn sum_ln
WARNUNG: Symbolischer Verweis IN nicht aufgelöst.
HINWEIS 137-205: Zeile durch aufgerufenes Makro "KENNWERTE2" erzeugt.
1 proc Means data=&IN noprint; class &M1 &M2; var n_vn sum_ln sum_ld sum_lct sum_vd;
-
22
1 ! Types &M1*&M2; output out=&IN&Suffix median=median_vn median_ln median_ld median_lct
1 ! median_vd mean=mean_vn mean_ln mean_ld mean_lct mean_vd sum=sum_vn sum_ln
FEHLER 22-322: Erwartet wird ein Name.

FEHLER 202-322: Option oder Parameter ist nicht bekannt und wird ignoriert.

FEHLER 22-322: Syntaxfehler, erwartet wird eines der folgenden: ein Name, ;, /, _ALL_,
_CHARACTER_, _CHAR_, _NUMERIC_.

HINWEIS: Zeile durch aufgerufenes Makro "KENNWERTE2" erzeugt.
1 proc Means data=&IN noprint; class &M1 &M2; var n_vn sum_ln sum_ld sum_lct sum_vd;
--
202
1 ! Types &M1*&M2; output out=&IN&Suffix median=median_vn median_ln median_ld median_lct
1 ! median_vd mean=mean_vn mean_ln mean_ld mean_lct mean_vd sum=sum_vn sum_ln
FEHLER 202-322: Option oder Parameter ist nicht bekannt und wird ignoriert.

HINWEIS 137-205: Zeile durch aufgerufenes Makro "KENNWERTE2" erzeugt.
1 proc Means data=&IN noprint; class &M1 &M2; var n_vn sum_ln sum_ld sum_lct sum_vd;
1 ! Types &M1*&M2; output out=&IN&Suffix median=median_vn median_ln median_ld median_lct
-
22
1 ! median_vd mean=mean_vn mean_ln mean_ld mean_lct mean_vd sum=sum_vn sum_ln
FEHLER 22-322: Syntaxfehler, erwartet wird eines der folgenden: ein Name, ;, (.

HINWEIS: Zeile durch aufgerufenes Makro "KENNWERTE2" erzeugt.
1 proc Means data=&IN noprint; class &M1 &M2; var n_vn sum_ln sum_ld sum_lct sum_vd;
1 ! Types &M1*&M2; output out=&IN&Suffix median=median_vn median_ln median_ld median_lct
--
202
1 ! median_vd mean=mean_vn mean_ln mean_ld mean_lct mean_vd sum=sum_vn sum_ln
FEHLER 202-322: Option oder Parameter ist nicht bekannt und wird ignoriert.

FEHLER: Datei WORK.IN.DATA existiert nicht.
WARNUNG: Symbolischer Verweis M1 nicht aufgelöst.
WARNUNG: Symbolischer Verweis M2 nicht aufgelöst.
FEHLER: Keine Datei geöffnet zum Einsehen von Variablen.
FEHLER: Keine Datei geöffnet zum Einsehen von Variablen.
FEHLER: Keine Datei geöffnet zum Einsehen von Variablen.
FEHLER: Keine Datei geöffnet zum Einsehen von Variablen.
FEHLER: Keine Datei geöffnet zum Einsehen von Variablen.
FEHLER: Keine Datei geöffnet zum Einsehen von Variablen.
WARNUNG: Symbolischer Verweis M1 nicht aufgelöst.
WARNUNG: Symbolischer Verweis M2 nicht aufgelöst.
FEHLER: Keine Datei geöffnet zum Einsehen von Variablen.
WARNUNG: Symbolischer Verweis IN nicht aufgelöst.
HINWEIS 137-205: Zeile durch aufgerufenes Makro "KENNWERTE2" erzeugt.
1 proc Means data=&IN noprint; class &M1 &M2; var n_vn sum_ln sum_ld sum_lct sum_vd;
1 ! Types &M1*&M2; output out=&IN&Suffix median=median_vn median_ln median_ld median_lct
-
22
1 ! median_vd mean=mean_vn mean_ln mean_ld mean_lct mean_vd sum=sum_vn sum_ln
FEHLER 22-322: Erwartet wird ein Name.

HINWEIS: Zeile durch aufgerufene Makrovariable "SUFFIX" erzeugt.
1 IN_stat5
--------
202

FEHLER 202-322: Option oder Parameter ist nicht bekannt und wird ignoriert.

HINWEIS: Das SAS System hat die Verarbeitung dieses Schritts aufgrund von Fehlern abgebrochen.
WARNUNG: Die Datei WORK.IN_STAT5 ist möglicherweise unvollständig. Beim Beenden des Schrittes
waren 0 Beobachtungen und 0 Variablen vorhanden.
WARNUNG: Datei WORK.IN_STAT5 wurde nicht ersetzt, da dieser Schritt angehalten wurde.
HINWEIS: PROZEDUR MEANS benötigt. (Gesamtverarbeitungszeit):
Echtzeit 0.01 Sekunden
CPU-Zeit 0.01 Sekunden

1076 %Kennwerte3(Gtyp_A_h_Free_KW_48h, _stat6, Gtyp, Animal);

HINWEIS: Es wurden 994 Beobachtungen aus der Datei WORK.GTYP_A_H_FREE_KW_48H. ausgelesen
HINWEIS: Die Datei WORK.GTYP_A_H_FREE_KW_48H_STAT6 weist 24 Beobachtungen und 29 Variablen auf.
HINWEIS: PROZEDUR MEANS benötigt. (Gesamtverarbeitungszeit):
Echtzeit 0.03 Sekunden
CPU-Zeit 0.03 Sekunden

Parameter = Wert

Hallo,

bei dem Makro "Kennwerte2" verwenden Sie Schlüsselparameter. Das sind lokale Makro-Variablen, die beim Aufruf bereits einen vorgegebenen Wert erhalten. Zunächst wird dabei der Name der Makro-Variable genannt, nach dem Gleichheitszeichen erfolgt der Initialwert.

%MACRO Kennwerte2(Analysedaten=IN, Suffix=Suffix, Merkmal1=M1, Merkmal2=M2);
(...)
%MEND Kennwerte2;

In diesem Fall wird der Makro-Variable "Analysedaten" der Wert IN zugewiesen, der Makro-Variable "Markmal1" der Wert M1 usw. Ich vermute mal, das ist nicht ganz das, was Sie wollten. Bei dem Makro Kennwerte3 verwenden Sie nämlich Positionsparameter, die bei Initialisierung den Wert NULL haben.

Lange Rede, kurzer Sinn, bei Ihrem Makro-Aufruf wäre dieses Makro wohl das, was Sie möchten:

%MACRO Kennwerte2(Analysedaten,Suffix,Merkmal1,Merkmal2);

PROC MEANS
DATA = &Analysedaten. NOPRINT;

CLASS &Merkmal1. &Merkmal2.;
VAR n_vn sum_ln sum_ld sum_lct sum_vd;
TYPES &Merkmal1.*&Merkmal2.;

OUTPUT OUT = &Analysedaten.&Suffix.

MEDIAN = median_vn median_ln median_ld median_lct median_vd
MEAN = mean_vn mean_ln mean_ld mean_lct mean_vd
SUM = sum_vn sum_ln sum_ld sum_lct sum_vd
QRANGE = IQR_vn IQR_ln IQR_ld IQR_lct IQR_vd
STD = std_vn std_ln std_ld std_lct std_vd;

RUN;

%MEND Kennwerte2;

/* Aufruf des Makros */
%Kennwerte2(Analysedaten=Gtyp_A_h_Free_KW_48h, Suffix=_stat5, Merkmal1=Gtyp, Merkmal2=Animal);

/* Oder */
%Kennwerte2(Gtyp_A_h_Free_KW_48h, _stat5, Gtyp, Animal);