Vor der Generierung einer Eingabemaske ist es sinnvoll, einen Kodierplan zu stellen. Unter Kodierplan können Sie einige Informationen zur Definition eines Kodierplans abrufen.
Es soll nun vorgestellt werden, wie mit SAS/FSP eine Eingabemaske erstellt
werden kann. Dabei wird exemplarisch an dem oben vorgestellten Beispiel
vorgegangen.
Die Eingabe-Maske soll wie folgt aussehen, wobei für die Automarken
die Methode multipler Kategorien verwendet wird.
<F1> Seite vorwaerts <F2> Seite rueckwaerts <F3> ein Fragebogen weiter <F4> ein Fragebogen zurueck <F5> einen neuen Fall einfuegen <F6> BEENDEN DER EINGABE VARIABLE NAME WERT Fragebogennummer LFD: ___ 1 bis 500 Alter ALTER: ___ 1 bis 120 Geschlecht GESCHL: _ 1 = weiblich 2 = maennlich Groesse (cm) GROESSE: ___ 20 bis 250 Gewicht (kg) GEWICHT: ___ 1 bis 200 Automarken 1 = BMW AUTO1: _ 2 = Fiat AUTO2: _ 3 = Ford AUTO3: _ 4 = Mercedes 5 = Opel 6 = VW 7 = andere Fehlende Werte sind mit der entsprechenden Anzahl von "9" zu kodieren.
Beispiel:
LIBNAME hrz "c:\benutzer\maske"; PROC FORMAT; VALUE geschlf 0="maennlich" 1="weiblich"; VALUE autof 1="BMW" 2="Fiat" 3="Ford" 4="Mercedes" 5="Opel" 6="VW" 7="Andere"; DATA hrz.kurs; INPUT lfd Alter Geschl Groesse Gewicht Auto1 Auto2 Auto3; LABEL lfd = "Nummer" Alter = "Alter" Geschl = "Geschlecht" Groesse = "Groesse (cm)" Gewicht = "Gewicht (kg)" Auto1 = "Automarke1" Auto2 = "Automarke2" Auto3 = "Automarke3"; FORMAT Geschl geschlf.; FORMAT lfd 3.0 Alter 3.0 Geschl 1.0 Groesse 3.0 Gewicht 3.0 Auto1 1.0 Auto2 1.0 Auto3 1.0; CARDS; ; RUN; PROC FSEDIT DATA=hrz.kurs SCREEN = hrz.screen1 MODIFY; RUN;
1 Information about screen modification 2 Screen Modification and Field Identification 3 Edit Program Statements and Compile 4 Assign Special Attributes to Fields 5 Modification of General Parameters 6 Browse Program StatementsMit dem Auswahlmenue
2 Screen Modification and Field Identificationkann der Bildschirm entsprechend der Vorgabe angepaßt werden.
<F1> Seite vorwaerts <F2> Seite rueckwaerts <F3> ein Fragebogen weiter <F4> ein Fragebogen zurueck <F5> einen neuen Fall einfuegen <F6> BEENDEN DER EINGABE VARIABLE NAME WERT Fragebogennummer LFD: ___ 1 bis 500
..... ..... .....Passend hierzu sollte natürlich auch die Tastaturbelegung innerhalb von SAS/FSP geändert werden (vgl. Schritt 5). Für die Gestaltung des Bildschirms ist die Einblendung der Zeilennummern am Anfang jeder Zeile hilfreich. Dies erreicht man durch Eingabe des Befehls "NUM ON" in der Kommando-Zeile. Man kann den Bildschirmtext auch farbig gestalten. Um die Textfarbe zu wechseln, muß man die <ESCAPE>-Taste und einen bestimmten Buchstaben für die jeweilige Farbe drücken:
| <ESC>-<A> für grau | <ESC>-<K> für schwarz |
| <ESC>-<P> für pink | <ESC>-<B> für blau |
| <ESC>-<M> für magenta | <ESC>-<R> für rot |
| <ESC>-<C> für cyan | <ESC>-<N> für braun |
| <ESC>-<W> für weiß | <ESC>-<G> für grün |
| <ESC>-<O> für orange | <ESC>-<Y> für gelb |
DID YOU CREATE ANY COMPUTED OR REPEATED FIELDS ?I.a. wird man diese Frage mit n (no) beantworten. Danach gelangt man in das "IDENTIFY"-Fenster, in dem man eventuell verschobene Variablen-Felder neu identifizieren muß. Grob gesprochen bedeutet dies, daß Sie dem Programm mitteilen müssen, wo das jeweilige Eingabefeld für eine Variable auf dem Bildschirm jetzt lokalisiert ist.
3 Edit Program Statements and Compilekann man ein SAS/SCL Programm (SCL steht für Screen Control Language) mit der Eingabemaske verbinden. Dieses Programm kann z.B. dazu dienen, daß nur gültige Werte eingegeben werden können und gleichzeitig schon einfache Plausibilitätschecks durchgeführt werden. Dies ist eine wichtige Maßnahme zur Sicherstellung einer hohen Datenqualität.
In dem folgenden SCL-Programm wird für jede Variable geprüft, ob der eingegebene Wert ein gültiger Wert ist. Andernfalls erscheint auf dem Bildschirm ein entsprechender Hinweis und ein Alarmton wird erzeugt.
* Daten-Kontrolle bei der Dateiengabe mit FSEDIT ; * mit Hilfe der Sprache SCL ; *------------------------------------------------*; INIT: RETURN; *------------------------------------------------*; MAIN: * Ueberpruefung der Variablen 1: lfd ; IF (lfd LE 0 OR lfd GT 500) AND lfd NE 999 THEN DO; ERRORON lfd; _MSG_ = "Variable LFD überprüfen "; ALARM; lfd =.; GOTO INIT; END; * Ueberpruefung der Variablen 2: Alter ; IF (Alter LE 0 OR Alter GT 120) AND Alter NE 999 THEN DO; ERRORON Alter; _MSG_ = "Variable ALTER überprüfen "; ALARM; Alter =.; GOTO INIT; END; * Ueberpruefung der Variablen 3: Geschl ; IF (Geschl NE 1 AND Geschl NE 2 AND Geschl NE 9 ) THEN DO; ERRORON Geschl; _MSG_ = "Variable Geschl überprüfen "; ALARM; Geschl =.; GOTO INIT; END; * Ueberpruefung der Variablen 4: Groesse ; IF (Groesse LT 20 OR Groesse GT 250) AND Groesse NE 999 THEN DO; ERRORON Groesse; _MSG_ = "Variable Groesse überprüfen "; ALARM; Groesse =.; GOTO INIT; END; * Ueberpruefung der Variablen 5: Gewicht ; IF (Gewicht LT 1 OR Gewicht GT 200) AND Gewicht NE 999 THEN DO; ERRORON Gewicht; _MSG_ = "Variable Gewicht überprüfen "; ALARM; Gewicht =.; GOTO INIT; END; * Ueberpruefung der Variablen 4 und 5: Groesse UND Gewicht; IF ( (Groesse LT 100 AND Gewicht GT 100) OR (Groesse GT 150 AND Gewicht LT 20 ) ) THEN DO; ERRORON Groesse; _MSG_ = "Überprüfen Sie die Variablen (Groesse, Gewicht)"; ALARM; Groesse = .; Gewicht = .; GOTO INIT; END; * Ueberpruefung der Variablen 6: Auto1; IF (Auto1 LT 1 or Auto1 GT 7) AND Auto1 NE 9 THEN DO; ERRORON Auto1; _MSG_ = "Variable Auto1 überprüfen"; ALARM; Auto1=.; GOTO INIT; END; * Ueberpruefung der Variablen 7: Auto2; IF (Auto2 LT 1 or Auto2 GT 7) AND Auto2 NE 9 THEN DO; ERRORON Auto2; _MSG_ = "Variable Auto2 überprüfen"; ALARM; Auto2=.; GOTO INIT; END; * Ueberpruefung der Variablen 8: Auto3; IF (Auto3 LT 1 or Auto3 GT 7) AND Auto3 NE 9 THEN DO; ERRORON Auto1; _MSG_ = "Variable Auto3 überprüfen"; ALARM; Auto3=.; GOTO INIT; END; RETURN; *--------------------------------------------------------*; TERM: RETURN; *--------------------------------------------------------*;
*----------------------------------------------------------*; INIT: RETURN; *----------------------------------------------------------*; MAIN: *----------------------------------------------------------*; *MACRO zur Ueberpruefung einer Variablen *; * var = Name der Variable *; * lgrenze = unterer zulaessiger Wert *; * rgrenze = oberer zulaessiger Wert *; * keinea = Zahl fuer keine Angabe *; * missing = Zahl fuer fehlende Werte (missing values) *; *----------------------------------------------------------*; %MACRO testen(var,lgrenze,rgrenze,keinea,missing); IF (&var < &lgrenze OR &var > &rgrenze) AND &var NE &keinea AND &var NE &missing AND &var NE . THEN DO; ERRORON &var; _MSG_="Falsche Eingabe bei der Variable &var"; ALARM; &var=.; RETURN; END; %MEND testen; %testen(lfd,1,500,999,999); %testen(alter,1,120,999,999); %testen(geschl,1,2,9,9); %testen(groesse,20,250,999,999); %testen(gewicht,1,200,999,999); %testen(auto1,1,7,9,9); %testen(auto2,1,7,9,9); %testen(auto3,1,7,9,9); /* ... weitere Tests ... */ RETURN; *------------------------------------------------------*; TERM: RETURN; *------------------------------------------------------*;
*-----------------------------------------------------------*; INIT: RETURN; *-----------------------------------------------------------*; MAIN: *-----------------------------------------------------------*; *MACRO zur Ueberpruefung aller Variablen VAR1 bis VARzahl *; * var = Name der Variable *; * zahl = Anzahl der Variablen *; * lgrenze = unterer zulaessiger Wert *; * rgrenze = oberer zulaessiger Wert *; * keinea = Zahl fuer keine Angabe *; * missing = Zahl fuer fehlende Werte (missing values) *; *; *-----------------------------------------------------------*; %MACRO testen2(var, zahl, lgrenze, rgrenze, keinea, missing); %DO i=1 %TO &zahl; IF (&var.&i < &lgrenze OR &var.&i > &rgrenze) AND &var.&i NE &keinea AND &var.&i NE &missing AND &var.&i NE . THEN DO; ERRORON.&i; _MSG_="Falsche Eingabe bei der Variable &var.&i"; ALARM; &var.&i=.; RETURN; END; %END; %MEND testen; %testen2(Fach,40,1,5,8,9); %testen2(Bed,100,1,14,88,99); /* ... weitere Tests ... */ RETURN; *------------------------------------------------------------*; TERM: RETURN; *------------------------------------------------------------*;Mit CLOSE schließt man das Fenster. Das SCL-Programm wird compiliert. Oft ist es ratsam, daß das SCL-Programm zusätzlich getrennt abgespeichert wird. Bei Bedarf steht ein Debugger zur Verfügung.
4 Assign Special Attributes to Fieldskann man einzelnen oder auch allen Feldern der Maske unterschiedliche Attribute zuordnen. Hier sei nur eine Auswahl der wichtigsten Attribute genannt:
| Attribut | Bedeutung |
|---|---|
| INITIAL | Vorgabewert |
| MAXIMUM | größter zulässiger Wert |
| MINIMUM | kleinster zulässiger Wert |
| REQUIRED | gültiger Wert erforderlich zum Abspeichern des Falls |
| FCOLOR | Farbe des Feldes |
| ECOLOR | Farbe des Feldes, wenn der eingegebene Wert des Feldes ungültig ist |
| JUSTIFY | Ausrichtung der Werte:LEFT, CENTER, RIGHT |
5 Modification of General Parametersdie Bedeutung allgemeiner Parameter geändert werden. Dies kann z.B. sinnvoll sein, wenn bei der Eingabe der Daten nach jedem 5. Fragebogen das Programm automatisch die Daten abspeichern soll. Dies kann mit der Option AUTOSAVE angegeben werden.
Hier kann man auch ein neues KEYS-Fenster festlegen, in diesem Beispiel mit dem Namen HRZ, in dem man dann die Tastatur entsprechend belegen kann. Dazu ruft man nach Änderung des "Keys name" im obigen Fenster und nach Verlassen dieses Fensters mit Hilfe des Kommandos KEYS das Keys-Fenster auf und gibt hier hinter den Funktionstasten die passenden Kommandos ein. Für dieses Beispiel können die folgenden lokalen Tastenbelegungen gemacht werden.
Area Color Attribute Background WHITE Border BLACK NONE Allow DELETE command: Y Banner BLACK NONE Allow ADD/DUP command: Y Command BLACK NONE Message RED NONE Protected BLACK Keys name: HRZ Unprotected BLACK Override on errors: Y Window rows: 39 Override on required: Y Window cols: 100 Autosave value: 5 Start row: 1 Modify password: ________ Start col: 1 Name command variable: ________ String command variables: ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________
KEYS <HRZ> KEYS DEFINITION F1 right F2 left F3 forward F4 backward F5 add F6 endDie Kommandos haben folgende Bedeutung:
| right | eine Bildschirmseite vorwärts |
| left | eine Bildschirmseite zurück |
| forward | einen Fall weiter |
| backward | einen Fall zurück |
| add | neuen, leeren Fall einfügen |
| end | abspeichern und Eingabe beenden |
Bei mehrseitigen Eingabemasken ist es sinnvoll, die Taste F5 mit den Befehlen
F5 add; =1zu belegen. Dies bewirkt, daß bei Einfügen eines neuen Falles automatisch die erste
Schließlich sei noch erwähnt, daß durch Auswahl von
6 Browse Program Statementsdas verwendete SAS/SCL-Programm angezeigt werden kann, ohne Veränderungen vornehmen zu dürfen.
Nach Beendigung der Maskenerstellung kann gleich mit der Dateneingabe begonnen werden. Es sei aber noch erwähnt, daß die Eingabemaske ein eigentlich schreibgeschütztes Feld darstellt, welches nur durch einschalten des Einfügemodus mit der Hilfe der "Einfg"-Taste auf der Tastatur überschreibbar gemacht werden kann. Existiert der Datensatz bereits, z.B. weil die Dateneingabe unterbrochen wurde und PROC FSEDIT verlassen wurde, kann die Maske mit den folgenden Befehlen erneut aufgerufen werden.
LIBNAME hrz "c:\benutzer\maske"; PROC FSEDIT DATA=hrz.kurs SCREEN = hrz.screen1; RUN;
In Ausnahmefällen ergibt sich die Notwendigkeit, nachträglich noch eine oder mehrere Variablen in eine Eingabemaske hinzuzufügen. Eine Möglichkeit dies zu tun, wird im folgenden beschrieben.
Zuerst muß man die neue Variable in einem DATA-Step dem Datensatz hinzufügen.
Beispiel:
DATA hrz.kursneu; SET hrz.kurs INPUT schuh; LABEL schuh ="Schuhgrösse"; FORMAT schuh 2.0; CARDS; ; RUN;Dann muß man PROC FSEDIT mit dem neuen Datensatz und dem alten Screen aufrufen.
Beipiel:
PROC FSEDIT DATA=hrz.kursneu SCREEN=HRZ.screen1 MODIFY ; RUN;Aus dem Menue muß man Punkt 2 auswählen und dann die neue Variable, d.h. den gewünschten Text und die entsprechende Anzahl von Underscores für das Eingabefeld, eingeben. Anschließend verläßt man das Fenster zur Bildschirmgestaltung, beantwortet die folgende Abfrage mit n (no) und gelangt in das "Identify"-Fenster. Hier muß man das Kommando
WANTED schuhin die Kommandozeile eingeben, um zu zeigen, daß die Variable schuh in die Eingabe-Maske aufgenommen werden soll. Anschließend wird man aufgefordert, den Cursor auf das zu der neuen Variable gehörenden Eingabefeld (d.h. die Underscores) zu plazieren und <RETURN> zu drücken. Damit ist die neue Variable in die Eingabemaske aufgenommen und man kann das "Identify"-Fenster und das MODIFY-Menue verlassen.