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!
proc pmenu catalog=orion.menus;
menu exit;
item 'Exit' menu=x;
menu x;
item 'OK' selection=y;
item 'Cancel' selection=z;
selection y 'end';
selection z 'command focus';
quit;
1
PROC 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
13
QUIT;
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!
%let msg=Press ENTER to continue.;
%window dsn columns=80 rows=20 menu=orion.menus.exit
#3 @ 6 'Data Set: ' dsn 41 attr=underline required=yes
#5 @ 6 'Press ENTER to continue.' msg protect=yes;
%window var columns=80 rows=20 menu=orion.menus.exit
#3 @ 6 'Data Set: ' dsn 41 attr=underline protect=yes
#5 @ 6 'Variables: ' var 41 attr=underline
#7 @ 6 'Press ENTER to continue.' msg protect=yes;
%window opt columns=80 rows=20 menu=orion.menus.exit
# 3 @ 6 'Data Set: ' dsn 41 attr=underline protect=yes
# 5 @ 6 'Variables: ' var 41 attr=underline protect=yes
# 7 @ 6 '# of obs: ' obs 2 attr=underline
# 9 @ 6 'Suppress Obs #s (Y or N): ' sup 1 attr=underline
#10 @ 6 'Double Space (Y or N): ' dbl 1 attr=underline
#11 @ 6 'Column Labels (Y or N): ' lab 1 attr=underline
#14 @ 6 'Press ENTER to continue.' msg protect=yes;
%window err columns=80 rows=20 menu=orion.menus.exit
#3 @ 6 'Data Set ' c=red dsn p=yes c=red attr=rev_video
' does not exist.' c=red
#5 @ 6 'Enter Y to try again or N to stop: '
try 1 attr=underline
#7 @ 6 'Press ENTER to continue.' msg protect=yes;
#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.
%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 PRINTDATA=&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!
%printwindow
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.
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.