Veröffentlicht am :
Reporting SASHELP

Erstellung eines ODS-Tagsets zur Zählung der Häufigkeit von Ereignissen

Dieser Code ist auch verfügbar auf: English Español Français
Das Skript verwendet `PROC TEMPLATE`, um ein neues Tagset zu erstellen. Dieses Tagset, 'counter', wurde entwickelt, um ODS-Ereignisse abzufangen. Es verwendet ein internes Wörterbuch, um den Zähler für jeden erkannten Ereignisnamen zu speichern und zu inkrementieren. Am Ende des Dokuments (Ereignis `doc finish`) sortiert es die Ereignisse nach absteigender Häufigkeit und druckt einen einfachen Textbericht. Das Skript demonstriert anschließend die Verwendung dieses Tagsets, indem es es auf die Ausgabe von `PROC PRINT` auf die Tabelle `sashelp.class` anwendet und den Zählbericht in eine Datei 'counter.txt' umleitet.
Datenanalyse

Type : SASHELP


Das Skript verwendet die Tabelle `sashelp.class` als Beispiel, um ODS-Ereignisse zu generieren. Diese Tabelle wird nicht geändert; sie dient lediglich dazu, die Ausführung einer Prozedur (`PROC PRINT`) auszulösen, deren Ereignisse vom Tagset gezählt werden.

1 Codeblock
PROC TEMPLATE
Erklärung :
Dieser Block verwendet `PROC TEMPLATE`, um ein neues ODS-Tagset namens `counter` zu definieren. Tagsets ermöglichen eine feine Steuerung der von SAS generierten Ausgabe. Dieses ist darauf programmiert, die Vorkommen jedes ODS-Ereignistyps zu zählen. Es verwendet Wörterbücher (ähnlich Hash-Tabellen), um die Zählungen zu verwalten. Die Schlüsselereignisse sind `doc` (für Initialisierung und Finalisierung), `count` (zum Inkrementieren der Zähler), `sort` (zum Sortieren der Ergebnisse) und `report` (zum Anzeigen des Abschlussberichts).
Kopiert!
1/*
2 Tagset to count the frequency of each event and print a report.
3*/
4 
5PROC TEMPLATE;
6define tagset tagsets.counter;
7 default_event = 'count';
8 
9 /*
10 Create an event count dictionary `$events'. Each key in the
11 dictionary is an event name. The value is the number of times the
12 event occurred.
13 
14 At doc start, initialize the event dictionary and the total event
15 counter. At finish, sort the event names by decreasing occurrence
16 and print a report.
17 */
18 define event doc;
19 start:
20 eval $events[event_name] 1;
21 eval $total 0;
22 finish:
23 trigger sort;
24 trigger report;
25 END;
26 
27 define event count;
28 DO / IF $events[event_name];
29 eval $events[event_name] $events[event_name] + 1;
30 ELSE;
31 eval $events[event_name] 1;
32 done;
33 eval $total $total+1;
34 END;
35 
36 /*
37 Create an array `$evname' that contains the event names. Sort
38 `$evname' using the counts in `$events'.
39 */
40 define event sort;
41 trigger dup;
42 eval $size $events; /* $size = size of $events */
43 eval $i $size;
44 DO / while $i > 0;
45 eval $j 1;
46 DO / while $j < $i;
47 eval $jplus1 $j+1;
48 SET $evname_j $evname[$j];
49 SET $evname_jplus1 $evname[$jplus1];
50 DO / IF $events[$evname_j] < $events[$evname_jplus1];
51 SET $temp $evname[$j];
52 SET $evname[$j] $evname[$jplus1];
53 SET $evname[$jplus1] $temp;
54 done;
55 eval $j $j+1;
56 done;
57 eval $i $i-1;
58 done;
59 END;
60 
61 define event dup;
62 iterate $events;
63 DO / while _name_;
64 SET $evname[] _name_;
65 next $events;
66 done;
67 END;
68 
69 /*
70 Print the `$events' dictionary in the order specified by the
71 `$evname' array.
72 */
73 define event report;
74 put "Number of individual events: " $events nl;
75 put "Total number of events: " $total nl nl;
76 put "Count Event name" nl;
77 iterate $evname;
78 DO / while _value_;
79 eval $occur $events[_value_];
80 eval $occur putn($occur, 'F.', 5);
81 put $occur " " _value_ nl;
82 next $evname;
83 done;
84 END;
85 
86 END;
87 
88RUN;
2 Codeblock
PROC PRINT
Erklärung :
Dieser Block wendet das zuvor definierte Tagset `tagsets.counter` an. Das ODS-Ziel `listing` wird geschlossen, dann wird das Tagset `counter` aktiviert, um in die Datei `counter.txt` zu schreiben. Die Ausführung von `PROC PRINT` auf `sashelp.class` generiert Ereignisse, die vom Tagset abgefangen und gezählt werden. Schließlich wird das Tagset geschlossen und das Ziel `listing` reaktiviert.
Kopiert!
1ods listing close;
2ods tagsets.counter file="counter.txt";
3PROC PRINT DATA=sashelp.class;
4RUN;
5ods tagsets.counter close;
6ods listing;
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.