Dieses Makro automatisiert die Berechnung von Statistiken (Standard: n, Mittelwert, Median, Min, Max) mittels PROC MEANS nach einer Datensortierung. Es verwaltet die Formatierung der Ergebnisse über Delimitierungsparameter. Der Code enthält bedingte Blöcke für eine horizontale oder vertikale Ausgabe (basierend auf einer nicht deklarierten '&orie'-Variablen im Parameter). Hinweis: Der Codeblock für die vertikale Ausrichtung enthält offensichtliche Syntaxfehler (SQL-Syntax in einem DATA-Schritt). Das Makro hängt von mehreren anderen Dienstmakros ab (AHGwords, AHGdatasort, etc.).
Datenanalyse
Type : CREATION_INTERNE
Das Makro arbeitet mit dem als Parameter übergebenen Datensatz (&dsn). Es generiert Ausgabetabellen (&out).
1 Codeblock
MACRO
Erklärung : Initialisierung lokaler Variablen und Datenaufbereitung. Aufruf externer Hilfsmakros (AHGdatasort, AHGwords, AHGgettempname) zum Sortieren der Daten und Parsen der Liste der angeforderten Statistiken und deren zugehörigen Formate.
Kopiert!
%local statN single %AHGwords(mystat,20)
%AHGwords(myformat,20) %AHGwords(IsStat,20);
%local i sortdsn mystats;
%AHGgettempname(sortdsn);
%AHGdatasort(data = &dsn,out=&sortdsn, by =&bigby &by);
%do i =1 %to %AHGcount(&stats);
%let single=%scan(&stats,&i,%str( ));
%let isStat&i=0;
%if not %index(&single,%str(%22)) %then
%do;
%let isStat&i=1;
%let mystats=&mystats &single ;
%end;
%end;
%put I am fine out=&out;
%AHGsetstatfmt(statfmt=&mystats);
%let statN=%AHGcount(&stats);
%do i=1 %to &statN;
%let single=%scan(&stats,&i,%str( ));
%let mystat&i=%scan(&single,1,&split);
%let myformat&i=%scan(&single,2,&split);
%if %AHGblank(&&myformat&i) and %str(&&isStat&i) %then %let myformat&i=&&&&formatof&&mystat&i;
%if &&isStat&i %then %AHGpm(mystat&i myformat&i);
%end;
%put I am fine 2;
1
%local statN single %AHGwords(mystat,20)
2
%AHGwords(myformat,20) %AHGwords(IsStat,20);
3
%local i sortdsn mystats;
4
5
%AHGgettempname(sortdsn);
6
7
%AHGdatasort(DATA = &dsn,out=&sortdsn, BY =&bigby &BY);
8
%DO i =1 %to %AHGcount(&stats);
9
%let single=%scan(&stats,&i,%str( ));
10
%let isStat&i=0;
11
%IF not %index(&single,%str(%22)) %THEN
12
%DO;
13
%let isStat&i=1;
14
%let mystats=&mystats &single ;
15
%END;
16
%END;
17
18
%put I am fine out=&out;
19
%AHGsetstatfmt(statfmt=&mystats);
20
%let statN=%AHGcount(&stats);
21
22
%DO i=1 %to &statN;
23
%let single=%scan(&stats,&i,%str( ));
24
%let mystat&i=%scan(&single,1,&split);
25
%let myformat&i=%scan(&single,2,&split);
26
%IF %AHGblank(&&myformat&i) and %str(&&isStat&i) %THEN %let myformat&i=&&&&formatof&&mystat&i;
27
%IF &&isStat&i %THEN %AHGpm(mystat&i myformat&i);
28
%END;
29
%put I am fine 2;
2 Codeblock
PROC MEANS Data
Erklärung : Berechnung der angeforderten deskriptiven Statistiken mittels PROC MEANS. Die Ergebnisse werden in der durch &out definierten Tabelle gespeichert.
Kopiert!
proc means data=&sortdsn noprint alpha=α;
var &var;
output out=&out
%do i=1 %to &statN;
%if &&isStat&i %then &&mystat&i%str(=)&&mystat&i;
%end;
;
%if not %AHGblank(&bigby&by) %then by &bigby &by;;
run;
1
PROC MEANSDATA=&sortdsn noprint alpha=α;
2
var &var;
3
OUTPUT out=&out
4
%DO i=1 %to &statN;
5
%IF &&isStat&i %THEN &&mystat&i%str(=)&&mystat&i;
6
%END;
7
;
8
%IF not %AHGblank(&bigby&BY) %THENBY &bigby &BY;;
9
RUN;
3 Codeblock
DATA STEP Data
Erklärung : Nachbearbeitungsschritt zur Anwendung bedingter Formate oder zur Umbenennung von Gruppierungswerten (by-Variablen) gemäß dem Parameter &byfmts.
Kopiert!
data &out;
set &out;
%do i=1 %to %AHGcount(&byfmts,dlm=&split);
format ahuigeby $50.;
if %AHGequaltext(input(&by,$100.),"%scan(%scan(&byfmts,&i,&split),1,&split2)")
then ahuigeby="%scan(%scan(&byfmts,&i,&split),2,&split2)";
%end;
run;
1
DATA &out;
2
SET &out;
3
4
%DO i=1 %to %AHGcount(&byfmts,dlm=&split);
5
FORMAT ahuigeby $50.;
6
IF %AHGequaltext(INPUT(&BY,$100.),"%scan(%scan(&byfmts,&i,&split),1,&split2)")
7
THEN ahuigeby="%scan(%scan(&byfmts,&i,&split),2,&split2)";
8
%END;
9
RUN;
4 Codeblock
PROC SQL Data
Erklärung : Wenn die (nicht deklarierte) Variable &orie gleich 'hori' ist, formatiert eine PROC SQL die Statistiken unter Verwendung der PUT-Funktion mit den zuvor identifizierten Formaten.
Kopiert!
%if &orie=hori %then
%do;
proc sql;
%if not &print %then create table &out as ;
select
/* %if not %AHGblank(&bigby) %then %str(&bigby,);*/
ahuigeby/* %sysfunc(tranwrd(&by,%str( ),%str(,)))*/
%do i=1 %to %AHGcount(&stats);
%if &&isStat&i %then ,put(&&mystat&i, &&myformat&i) as &&mystat&i ;
%else ,&&mystat&i;
%end;
from &out
;quit;
%end;
1
%IF &orie=hori %THEN
2
%DO;
3
PROC SQL;
4
%IF not &PRINT %THEN create TABLE &out as ;
5
select
6
/* %if not %AHGblank(&bigby) %then %str(&bigby,);*/
%IF &&isStat&i %THEN ,put(&&mystat&i, &&myformat&i) as &&mystat&i ;
10
%ELSE ,&&mystat&i;
11
%END;
12
from &out
13
;QUIT;
14
15
%END;
5 Codeblock
DATA STEP Data
Erklärung : Wenn &orie 'vert' ist, wird versucht, eine Tabelle 'ahuigeprint' zu erstellen. ACHTUNG: Dieser Block enthält ungültigen Code. Er vermischt die Syntax eines DATA STEP ('set &out') mit SQL-Klauseln ('put(...) as ...', 'from &out'). Dieser Code wird fehlschlagen.
Kopiert!
%if &orie=vert %then
%do;
data ahuigeprint;
set &out ;
%do i=1 %to %AHGcount(&stats);
%if &&isStat&i %then ,put(&&mystat&i, &&myformat&i) as &&mystat&i ;
%else ,&&mystat&i;
%end;
from &out
;quit;
%end;
1
%IF &orie=vert %THEN
2
%DO;
3
4
DATA ahuigeprint;
5
SET &out ;
6
%DO i=1 %to %AHGcount(&stats);
7
%IF &&isStat&i %THEN ,put(&&mystat&i, &&myformat&i) as &&mystat&i ;
8
%ELSE ,&&mystat&i;
9
%END;
10
from &out
11
;QUIT;
12
13
%END;
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.
SAS und alle anderen Produkt- oder Dienstleistungsnamen von SAS Institute Inc. sind eingetragene Marken oder Marken von SAS Institute Inc. in den USA und anderen Ländern. ® zeigt die Registrierung in den USA an. WeAreCAS ist eine unabhängige Community-Site und nicht mit SAS Institute Inc. verbunden.
Diese Website verwendet technische und analytische Cookies, um Ihre Erfahrung zu verbessern.
Mehr erfahren.