Veröffentlicht am :
Makro EXTERNE

Fenstermakro für PROC PRINT

Dieser Code ist auch verfügbar auf: English Español Français
Dieses Skript definiert zunächst eine Reihe von modalen Fenstern mit PROC PMENU und %WINDOW, um eine Benutzeroberfläche zu erstellen. Das Makro %printwindow orchestriert dann die Interaktion: Es fordert den Benutzer auf, einen Datensatznamen einzugeben, validiert dessen Existenz, fordert eine (optionale) Liste von Variablen an und validiert deren Vorhandensein, und fragt dann nach Formatierungsoptionen für PROC PRINT (Anzahl der Beobachtungen, Unterdrückung von Nummern usw.). Schließlich wird eine PROC PRINT-Schrittanweisung dynamisch basierend auf allen gesammelten Informationen zusammengestellt und ausgeführt.
Datenanalyse

Type : EXTERNE


Das Skript ist so konzipiert, dass es auf jedem SAS-Datensatz arbeitet, dessen Name interaktiv vom Benutzer über ein Eingabefenster bereitgestellt wird. Die Existenz des Datensatzes wird zur Laufzeit validiert.

1 Codeblock
PROC PMENU
Erklärung :
Diese Prozedur definiert eine Menüstruktur namens 'exit' im Katalog orion.menus. Dieses Menü wird von den interaktiven Fenstern verwendet, um Optionen zum Beenden ('OK', 'Cancel') anzubieten und Aktionen mit diesen Auswahlen zu verknüpfen.
Kopiert!
1PROC PMENU catalog=orion.menus;
2 menu exit;
3 item 'Exit' menu=x;
4 
5 menu x;
6 
7 item 'OK' selection=y;
8 item 'Cancel' selection=z;
9 
10 selection y 'end';
11 selection z 'command focus';
12 
13QUIT;
2 Codeblock
%WINDOW
Erklärung :
Deklariert vier modale Fenster (dsn, var, opt, err), die als Benutzeroberfläche zur Eingabe von Parametern dienen. Jedes Fenster hat ein spezifisches Layout zur Anzeige von Text und Eingabefeldern für den Datensatznamen, Variablen, Druckoptionen oder zur Anzeige von Fehlermeldungen.
Kopiert!
1%let msg=Press ENTER to continue.;
2 
3%window dsn columns=80 rows=20 menu=orion.menus.exit
4 
5 #3 @ 6 'Data Set: ' dsn 41 attr=underline required=yes
6 #5 @ 6 'Press ENTER to continue.' msg protect=yes;
7 
8%window var columns=80 rows=20 menu=orion.menus.exit
9 
10 #3 @ 6 'Data Set: ' dsn 41 attr=underline protect=yes
11 #5 @ 6 'Variables: ' var 41 attr=underline
12 #7 @ 6 'Press ENTER to continue.' msg protect=yes;
13 
14%window opt columns=80 rows=20 menu=orion.menus.exit
15 
16 # 3 @ 6 'Data Set: ' dsn 41 attr=underline protect=yes
17 # 5 @ 6 'Variables: ' var 41 attr=underline protect=yes
18 # 7 @ 6 '# of obs: ' obs 2 attr=underline
19 # 9 @ 6 'Suppress Obs #s (Y or N): ' sup 1 attr=underline
20 #10 @ 6 'Double Space (Y or N): ' dbl 1 attr=underline
21 #11 @ 6 'Column Labels (Y or N): ' lab 1 attr=underline
22 #14 @ 6 'Press ENTER to continue.' msg protect=yes;
23 
24 %window err columns=80 rows=20 menu=orion.menus.exit
25 
26 #3 @ 6 'Data Set ' c=red dsn p=yes c=red attr=rev_video
27 ' does not exist.' c=red
28 
29 #5 @ 6 'Enter Y to try again or N to stop: '
30 try 1 attr=underline
31 
32 #7 @ 6 'Press ENTER to continue.' msg protect=yes;
3 Codeblock
Macro
Erklärung :
Dies ist der Kern des Skripts. Dieses Makro verwaltet den interaktiven Ablauf: Es zeigt die Fenster an, um Benutzereingaben zu sammeln, validiert die Existenz des Datensatzes und der Variablen mithilfe von %sysfunc-Funktionen, konstruiert dynamisch die Optionen und die VAR-Anweisung für PROC PRINT und führt den Bericht aus.
Kopiert!
1%macro printwindow;
2 
3 %local dsn var vars dsid rc obs sup dbl lab supx dblx labx try msg;
4 %let msg=Press ENTER to continue.;
5 %let sysmsg=Enter dataset name.;
6 %display dsn;
7 %let dsn=%upcase(&dsn);
8 
9 %DO %while(%sysfunc(exist(&dsn))=0);
10 %let dsn=%upcase(&dsn);
11 %let try=;
12 %display err;
13 %IF %upcase(&try)=Y %THEN %display dsn;
14 %ELSE %DO;
15 %put ERROR: Dataset &dsn does not exist.;
16 %return;
17 %END;
18 %END;
19 
20 %let sysmsg=Enter variable names or leave blank.;
21 %display var;
22 
23 %IF &var ne %THEN %DO;
24 %let dsid=%sysfunc(open(&dsn(keep=&var)));
25 %let rc=%sysfunc(close(&dsid));
26 %let var=%upcase(&var);
27 %IF &dsid=0 %THEN %DO;
28 %put ERROR: Variables(&var) not in &dsn..;
29 %return;
30 %END;
31 %let vars=var &var;
32 %END;
33 
34 %let sysmsg=Select options.;
35 %display opt;
36 
37 %IF &obs ne %THEN %let obs=(obs=&obs);
38 %IF %upcase(&sup)=Y %THEN %let supx=noobs;
39 %IF %upcase(&dbl)=Y %THEN %let dblx=double;
40 %IF %upcase(&lab)=Y %THEN %let labx=label;
41 
42 PROC PRINT DATA=&dsn &obs &supx &dblx &labx;
43 &vars;
44 title "&dsn";
45 RUN;
46 title;
47 
48 %put NOTE: Processing complete.;
49 
50%mend printwindow;
4 Codeblock
Macro Call
Erklärung :
Führt das Makro %printwindow aus und startet so den interaktiven Prozess zur Berichtserstellung.
Kopiert!
1%printwindow
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.