SAS
Tutorial
Peter HACKL
Peter MELICHAREK
Dieses SAS-Tutorial wurde von Peter HACKL und Peter MELICHAREK erstellt. Es steht Ihnen frei das SAS-Tutorial anzuwenden. Die Autoren behalten sich das Copyright vor. Bei einer Weitergabe des Materials ist dieser Copyrightvermerk ebenfalls weiterzugeben. Eine Verwendung des gesamten Tutorials oder eines Teils davon in Ihren Arbeiten ist nur mit Zustimmung der Autoren erlaubt.
Da dieser Kurs doch sehr umfangreich ist, haben wir ihn auf 6 Teile zerlegt, die einzeln geladen werden können. Trotzdem kann die Ladezeit etwas länger dauern.
1 Einleitung S A S - T U T O R I A L
1.2 BETRIEBSARTEN UND SAS-HELP
2 SAS für den eiligen Benutzer
2.2.3 EINLESEN DER DATEN VON EINER
BETRIEBSSYSTEM-DATEI:
2.2.4 SPALTENORIENTIERTES EINLESEN DER
DATEN:
2.2.5 VERKNÜPFEN UND TRANSFORMIEREN DER
DATEN:
2.4 Lektion 4: Der Datensatz HANDEL
2.5 Lektion 5: FÜR SIE ZUM
ÜBEN
3.1 DAS EINLESEN, SPEICHERN UND WIEDERAUFFINDEN VON DATEN
3.2 DAS AUFBEREITEN UND BEARBEITEN VON DATEN
3.3 DAS ERSTELLEN VON REPORTEN
3.7.1 NUMERISCHE FORMATDEFINITIONEN:
3.7.2 ALPHANUMERISCHE FORMATDEFINITIONEN
(BEGINNEN MIT "$"):
3.7.4 KONTROLLE DER SPALTEN UND ZEILEN
3.11 DAS AUFBEREITEN DER DATEN
3.12.1 ARITHMETISCHE OPERATIONEN
3.14.1.2 IF-THEN/ELSE Anweisung
3.15.4 ITERATIVE DO-ANWEISUNG,
ZÄHLSCHLEIFE
3.16 AUSWAHL VON VARIABLEN UND BEOBACHTUNGEN
3.19 DAS EINLESEN VON DATEN aus einer Betriebssystemdatei
3.20 Ausgabe von Daten in eine Betriebssystemdatei
4.2.1 AUSGABE DER DATEN AM DRUCKER ODER
AM BILDSCHIRM
4.2.2 GRAPHISCHE DARSTELLUNG DER DATEN
4.2.3 AUSZÄHLEN UND ANALYSIEREN VON
HÄUFIGKEITEN
4.3 ÜBERSICHT ÜBER DIE SAS-PROZEDUREN
4.3.3 Analyse von Häufigkeiten
4.3.7 Analyse linearer Modelle
4.3.8 Nichtparametrische Analyse
4.3.11 Sonstige multivariate Verfahren
4.3.16 Design von Experimenten
5.3.1 Labels für einen Wertebereich
5.4 AUSGABE AUF EXTERNE DATEIEN
WER
soll das SAS-Tutorial benützen?
Jeder,
der einfache oder komplizierte Datenanalysen mit SAS machen möchte und noch
keine Erfahrungen mit SAS hat. Also etwa Diplomanten und Dissertanten, die im
Rahmen Ihrer wissenschaftlichen Arbeit eine empirische Studie planen.
WARUM
sollen Sie das SAS-Tutorial benützen?
1.
Das
SAS-Tutorial wird Sie in die Lage versetzen, einfache Anwendungen von SAS
selbständig durchzuführen.
2.
Sie
werden lernen, die SAS-Referenzkarten, die SAS-Handbücher und sonstige
SAS-Unterlagen zu verstehen, sodass Sie mit deren Hilfe auch komplexere
Aufgaben lösen können.
WAS
können Sie im SAS-Tutorial lernen?
Wir haben die Lektionen des SAS-Tutorial in
sechs Abschnitte geteilt:
1.
Dieser
Abschnitt ist die EINFÜHRUNG
2.
In FÜR
DEN EILIGEN BENÜTZER geben wir Ihnen einen Überblick darüber, wie ein
SAS-Programm aufgebaut ist. Sie werden seine Struktur und einige immer
wiederkehrende Details kennenlernen.
3.
In MEHR
ÜBER DEN DATA-STEP lernen Sie über die Möglichkeiten, Ihre Daten in SAS
aufzubereiten, sodass sie für gewünschte statistische Verarbeitungen zur
Verfügung stehen. Das Motto ist: Das Häufige und Wichtige zuerst.
4.
In SAS-Prozeduren
geben wir Ihnen eine Übersicht über die in SAS verfügbaren Verfahren. Wir
zeigen Ihnen in einfachen Beispielen, wie Sie SAS dazu bringen, die Verfahren
auf Ihre Daten anzuwenden.
5.
In REPORT-ERSTELLUNG
IN SAS zeigen wir Ihnen, wie Sie Ihre Daten und Ergebnisse von SAS-Programmen
mittels SAS formatieren und so Tabellen im weiteren Sinn (Reports) erstellen
können. Solche Reports können Sie beispielsweise in den Editor übernehmen, mit
dem Sie Ihre Dissertation etc. schreiben.
6.
In Tips
und Tricks der Autoren wird gezeigt, wie manche Prozeduren zu bedienen
sind.
WIE
sollen Sie sich das Durcharbeiten des SAS-Tutorial einteilen?
Sie
sind ein EILIGER SAS-Benutzer (Sie wollen sich einen raschen Überblick
verschaffen, vielleicht in einer einfachen Anwendung SAS selbst benutzen):
Beschränken Sie sich auf den Abschnitt 2. Rechnen Sie mit etwa 90 Minuten zum
Lesen der Schirme und etwa 30 Minuten zum Erstellen, Testen und Ausführen eines
Übungs-Programmes.
Sie
wollen SAS AUSFÜHRLICHER kennenlernen: Rechnen Sie mit folgenden Lese-Sessionen
(L-S) und aktiven Sessionen (A-S) zu je 30 Minuten:
Abschnitt L-S A-S
Für den eiligen Benützer 3 1
Mehr über den DATA-Step 5 2
Statistische Verfahren in SAS 2 2
Report Erstellen in SAS 3 2
Wir
habenden Arbeitsaufwand in 30-minütige Sessionen vor dem Bildschirm eingeteilt.
Lese-Session bedeutet, dass Sie in dieser Zeit im SAS-Tutorial lesen. Aktive
Session bedeutet, dass Sie in dieser Zeit ein SAS-Programm selbst erstellen, es
testen, laufen lassen und den Output diskutieren. Sie sollten nicht mehr als
eine Lese-Session pro Tag durchmachen, eventuell gemeinsam mit einer aktiven
Session.
WIE
arbeiten Sie mit dem SAS-Tutorial?
Um in
die Lektion eines Abschnittes einzusteigen, wählen Sie in der Ausgangsmaske
durch Verschieben des Cursors die Zeile des gewünschten Abschnittes an.
Bestätigen Sie Ihre Anwahl mit der RETURN-Taste.
Zum
Blättern innerhalb der Lektion und zum Verlassen benützen Sie die
Funktionstasten. Die letzten beiden Zeilen jedes Bildschirmes zeigen Ihnen die
Belegung der aktiven Funktionstasten an.
WELCHE
KENNTNISSE sollten Sie mitbringen?
Grundkenntnisse des BETRIEBSSYSTEMS: Diese können Sie sich in
einem Kurs des Rechenzentrums erwerben. Fragen Sie im Sekretariat.
Kenntnisse aus STATISTIK: Der Stoff aus Statistik, den Sie für die
erste Diplomprüfung an der WU gelernt haben, ist eine gute Basis.
Bedenken
Sie, dass Ihnen SAS hilft, Statistik anzuwenden. Sie selbst müssen VERSTEHEN,
was Sie SAS für sich machen lassen. Dabei hilft Ihnen weder dieses SAS-Tutorial
noch SAS. Wir geben Ihnen allerdings Hinweise auf die entsprechende Literatur.
Wir
unterscheiden zwei Arten des Aufrufes und der Abarbeitung von SAS-
Programmen:
interaktiv
nicht interaktiv
Interaktive
Betriebsart
Der
Aufruf erfolgt über die Eingabe
SAS
Es wird
der DISPLAY-MANAGER von SAS gestartet und nach kurzer Zeit erscheinen am
Bildschirm zwei SAS-Fenster. Im oberen Hälfte des Bildschirmes befindet sich
das AUSGABE-Fenster (entspricht dem LISTING) und im unteren Teil das
PROGRAMM-Fenster. Hier werden Sie in der Regel Ihre Eingaben tätigen.
Jedes
Fenster ist zweigeteilt. Die oberste Eingabezeile ist die Befehlszeile. Hier
setzen Sie die Kommandos zur Steuerung des Ablaufes ab. Die weiteren Zeilen
dienen der Ein- oder Ausgabe. Die interaktive Sitzung wird durch die Eingabe
von ENDSAS oder BYE in der Befehlszeile beendet.
Es gibt
noch zwei weitere für das SAS-TUTORIAL wesentliche Fenster:
LOG-Fenster
HILFE-Fenster
Nicht-Interaktive
Betriebsart
Die
SAS-Prozedur wird mit einem am System verfügbaren Texteditor erstellt. Diese
Betriebsart finden Sie im SAS-TUTORIAL als Standard. Anschließend wird die
Verarbeitung durch die Eingabe von
SAS Programmname
gestartet.
SAS führt nunmehr die Prozedur aus und übergibt nach Beendigung die Kontrolle
wiederum an das Betriebssystem. Nunmehr können Sie das SAS-Log durchsehen,
eventuelle Fehler korrigieren und die Prozedur neu starten. Ist das Programm
fehlerfrei ausgeführt worden, so können Sie die Ergebnisse interpretieren. Für
den Anfänger ist die nicht-interaktive Betriebsart einfacher zu erlernen.
SAS
bietet Ihnen eine Hilfestellung zu den meisten PROCs und zum DATA-Step an.
Folgende
Vorgangsweise ist dazu notwendig:
Sie starten SAS in der interaktiven Betriebsart
Sie geben in der Befehlszeile des PROGRAMM-Fensters einen der
folgenden Befehle ein:
help;
help name;
Wird
nur der Befehl help eingegeben, so erscheint eine Auswahlmaske der verfügbaren
Themen im HELP-Fenster. Ein Menue-Punkt ist nunmehr mit den Cursor- bzw.
Tab-Tasten auszuwählen. Dadurch ist es möglich sich stufenweise bis zur
gewünschten Information vorzuarbeiten.
Wird
hingegen der Befehl help name eingegeben, so erscheint die gewünschte
Hilfestellung sofort am Bildschirm.
Bitte
beachten Sie! Auch das HELP-Fenster hat eine Befehlszeile. Ein Fenster wird mit
END; geschlossen.
SAS
(Statistical Analysis System) ist ein Computer-Programm zum Analysieren von
Daten. Ein typischen Beispiel für den Bedarf an solcher Analyse aus den Sozial-
und Wirtschaftswissenschaften ist das Auswerten Von Daten aus empirischen
Erhebungen. Wir wollen das SAS-Tutorial damit beginnen, die einzelnen Schritte
in der Analyse von solchen Daten mittels SAS am Beispiel eines einfachen
SAS-Programmes zu zeigen.
Nehmen
wir an, in einer Erhebung in Handelsbetrieben sind die folgenden Daten erhoben
worden:
|
|
Variable |
Datentyp |
|
Name
des Betriebes |
NAME |
alphanumerisch |
|
Ist
der Betrieb ein Diskonter ? (j/n) |
DISKONT |
alphanumerisch |
|
Umsatz
im Bereiche Food-Artikel |
UMSATZ1 |
numerisch |
|
Anzahl
der Mitarbeiter |
ANZ_MA |
numerisch |
In der
Spalte 'Variable' geben wir Namen an, mit denen wir diese Daten im SAS-Programm
ansprechen wollen. In der Spalte 'Datentyp' geben wir an, ob die Daten eine
rein zahlenmäßige Information ('numerisch') sind, oder ob es sich um
Textvariable ('alphanumerisch') handelt.
Es ist
stets eine gute Idee, am Beginn der statistischen Analyse die Daten graphisch
darzustellen. Wir wollen uns deshalb von einem SAS-Programm ein Streu-Diagramm
zeichnen lassen, das die Umsätze der untersuchten Betriebe in Abhängigkeit von
der Zahl ihrer Mitarbeiter zeigt.
Dazu
verwenden wir folgendes SAS-Programm:
DATA START;
INPUT NAME $ DISKONT $ UMSATZ1
ANZ_MA;
CARDS;
MM N 156
22
MK J 856.5 24
........hier folgen die weiteren
Daten
;
PROC PRINT;
TITLE 'ERGEBNIS DER PROC PRINT';
PROC PLOT;
PLOT UMSATZ1*ANZ_MA=DISKONT;
TITLE 'ERGEBNIS DER PROC PLOT';
Das
Programm beginnt mit dem DATA-Step, in dem wir SAS sagen, welche Variable es
lesen und dann verarbeiten soll. Die Daten selbst sind im DATA-Step aufgelistet. Dann folgen zwei Abschnitte,
jeder beginnend mit PROC. In Ihnen erfolgt die eigentliche Verarbeitung, hier
das Drucken der eingelesenen Daten und das Generieren des Streu-Diagramms.
Wir
können in ein SAS-Programm Kommentare einfügen, das sind Texte, die zwischen
'/*' und '*/' stehen; sie werden von SAS ignoriert. Wir werden unser
SAS-Programm nochmals anschreiben und es mit einigen Kommentaren erläutern.
DATA START; /* Der DATA-Step beginnt; wir sagen SAS, */
/* dass wir Daten lesen
und in die SAS-Datei */
/* START speichern
wollen. */
INPUT NAME $ DISKONT $ UMSATZ1 ANZ_MA; /* Wir sagen SAS, */
/* in welcher Reihenfolge
und welche Daten */
/* es lesen soll; '$' nach
einer Variablen */
/* bedeutet: die Variable
ist alphanumerisch */
CARDS; /* Es folgen die Daten.
*/
MM
N 156 22
MK
J 856.5 24
KJ
J 230 11
AH2
J 534 18
FG
N 154 19 /*
wir haben Daten von */
LL
N 167 19 /* 18 Betrieben */
WE
N 154 8
DJ J
231 11
AH J
432 16
LL N
121 15
RS J
324 19
JM N 98 9
AZ
N 121 8
KL
N 128 17
TT
J 348 21
OP
N 87 4
UT N
145 13
MI J
211 16
; /* Der ';' sagt
SAS: Ende der Daten. */
PROC PRINT; /* Wir sagen SAS:
drucke die Daten */
TITLE 'ERGEBNIS DER PROC PRINT'; /*
und verwende als */
/* Überschrift
des Ausdruckes diesen Titel */
PROC PLOT; /* Wir sagen SAS:
Zeichne ein Streu-Diagramm */
PLOT UMSATZ1*ANZ_MA=DISKONT; /* wobei auf der vertikalen */
/* Achse UMSATZ1, auf der horizontalen Achse */
/* ANZ_MA stehen; '=DISKONT' sagt SAS: mar- */
/* kiere jede Beobachtung im Diagramm mit */
/* Merkmalsausprägung von DISKONT. */
TITLE 'ERGEBNIS DER PROC PLOT';
Das
Programm speichern wir als Datei START.sas. Mit dem Befehl
sas START
bringen
wir SAS dazu, die einzelnen Zeilen des Programms zu lesen und auszuführen. SAS
erzeugt eine Ergebnis-Datei START.lst mit folgendem Inhalt:
ERGEBNIS DER PROC
PRINT 1
OBS NAME DISKONT UMSATZ1
ANZ_MA
1 MM N 156.0 22
2 MK J 856.5 24
3 KJ J 230.0 11
4 AH2 J 534.0 18
5 FG N 154.0 19
6 LL N 167.0 19
7 WE
N 154.0 8
8 DJ J 231.0 11
9 AH J 432.0 16
10 LL N 121.0 15
11
RS J 324.0 19
12 JM N 98.0 9
13 AZ N 121.0 8
14 KL N
128.0 17
15 TT J 348.0 21
16 OP
N 87.0 4
17 UT N 145.0 13
18 MI J 211.0 16
Dieser
erste Teil der LISTING-Datei ist lediglich eine Liste der Daten. In die erste
Spalte stellt SAS die laufende Nummer der Beobachtung. Eine solche Liste eignet
sich gut zum überprüfen der Daten auf ihre Richtigkeit; Eingabefehler können
Sie mit Ihrer Hilfe leicht entdecken.
ERGEBNIS DER PROC
PLOT 2
PLOT OF
UMSATZ1*ANZ_MA SYMBOL IS VALUE OF
DISKONT
UMSATZ1 | J
|
750 +
|
|
|
J
500 +
| J
|
J
| J
250 + J
| J N
| N N N N N N
N
|N
0
+
-+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
4 6 8 10
12 14 16
18 20 22
24
ANZ_MA
NOTE:
2 OBS HIDDEN
Der
zweite Teil ist das gewünschte Streu-Diagramm. Die Qualität des Diagramms ist
durch den Schnelldrucker beschränkt. Dafür typisch ist
auch,
dass Beobachtungen auf der gleichen Druckposition zu liegen kommen können. SAS
meldet uns, dass das im Fall unseres Streu-Diagramms zweimal
passiert
ist (NOTE: 2 OBServations HIDDEN, d.h., verdeckt). SAS unterstützt natürlich
auch die Ausgabe auf einem Laserdrucker oder Plotter, die eine viel bessere
graphische Qualität des Diagramms liefert. Doch auch die billige
Schnelldrucker-Graphik lässt die wesentlichen Charakteristiken der Daten
erkennen. So sieht man, in welchem Wertebereich die beiden Variablen liegen,
dass die Diskonter mit steigender Zahl der Mitarbeiter einen stärker wachsenden
Umsatz haben als die übrigen Betriebe, etc.
Zum Abschluss
dieser Lektion noch einige wichtige
SYNTAX-REGELN
für SAS-Programme:
Jede SAS-Anweisung muss mit einem ';' beendet werden
Die Anweisungen können in GROSS- oder Kleinschreibung sein
Ein Variablen-Namen
kann bis zu 8 Zeichen lang sein
er muss mit einem Buchstaben beginnen
die weiteren Zeichen können Buchstaben, Ziffern und '_' (als einziges Sonderzeichen) sein
Variablen-Namen und andere Sprachelemente von SAS werden durch
(ein oder mehrere) Leerzeichen oder Zeilenwechsel getrennt
Ein
Hinweis:
Sie sollten SAS-Programme möglichst übersichtlich halten. Eine
klare PROGRAMM-STRUKTUR macht Fehler
weniger wahrscheinlich und erleichtert die Fehlersuche.
KOMMENTARE machen das Programm auch noch in späterer Zeit lesbar
und erleichtern Ihnen die Wartung.
Ein
SAS-Programm besteht aus zwei Teilen
dem DATA-Step zur Datenaufbereitung
dem PROC-Step zur Datenauswertung.
Im
DATA-Step können Sie
Daten einlesen
Daten prüfen und korrigieren
neue Daten aus den eingelesenen generieren
Daten in Dateien ausgeben.
Das
Ergebnis des DATA-Steps ist eine SAS-Datei in der Form einer Matrix: jede
Spalte entspricht einer Variablen, jede Zeile einer Beobachtung. Das einzelne
Element wird Datenwert genannt. Eine solche SAS-Datei benötigt zum Öffnen SAS.
Im
PROC-Step: in ihm können Sie eine oder mehrere Prozeduren (z.B.: die PROC PRINT
oder die PROC PLOT) Ihre Daten verarbeiten lassen. Die Prozeduren können Sie
durch Setzen von Parametern oder Optionen Ihren aktuellen Daten und
Analyse-Erfordernissen anpassen.
Die
Daten in einer SAS-Datei können
numerisch (Ziffern, Vorzeichen, Kommapunkt) oder
alphanumerisch (auch Buchstaben)
sein.
Dass
die Daten mit ihrem Variablennamen angesprochen werden können, haben Sie
bereits in der vorigen Lektion kennengelernt. Erinnern Sie sich in diesem
Zusammenhang an die Regeln für das Bilden von Variablennamen.
Im
SAS-Programm START der letzten Session waren die Daten ein Teil des Programms.
Meistens werden Sie es jedoch vorziehen, Ihre Daten getrennt vom SAS-Programm
(in einer Betreissystemdatei) zu speichern. Dazu ändern wir das Programm START
geringfügig:
DATA STARTFIX;
INFILE "HANDEL.DATEN";
INPUT NAME $ DISKONT $ UMSATZ1 ANZ_MA;
PROC PRINT;
PROC PLOT;
PLOT UMSATZ1*ANZ_MA=DISKONT;
In der
INFILE-Anweisung teilen Sie SAS mit, wo sich die Daten befinden, und aus
welcher Datei gelesen werden soll. Natürlich entfällt dabei die CARDS-Anweisung
und die Auflistung der Daten.
In den
bisherigen Beispielen haben wir die einzelnen Daten durch Leerzeichen getrennt.
Eine alternative Art, die Daten anzuordnen (die auch einige Einschränkungen
vermeidet) ist der spaltenorierntierte INPUT: In der INPUT-Anweisung sagen Sie
SAS, in welchen Spalten der zu lesenden Datei welche Variable stehen.
Mit der
INPUT-Anweisung
INPUT NAME $ 1-3 DISKONT $ 5 UMSATZ1 8-13
ANZ_MA 14-16;
sagen
wir SAS, dass die Daten der Variablen NAME in den Spalten 1 bis 3, die der
Variablen DISKONT in der Spalte 5, etc. stehen. Die Daten der ersten beiden
Beobachtungen sind dementsprechend folgendermaßen in den Spalten 1 bis 22
angeordnet:
1111111111222
1234567890123456789012
MM
N 156 22
MK
J 856.5 24
ähnlich
können Sie vorgehen, wenn Sie Ihre Daten im SAS-Programm mit der
CARDS-Anweisung verarbeiten. Am Rande soll erwähnt werden, dass SAS Ihnen noch
andere Möglichkeiten zum Einlesen der Daten bietet.
Sie
werden oft in die Lage kommen, statistische Verarbeitungen von Variablen zu
machen, die Sie nicht direkt erhoben haben, aber aus Ihren Daten ableiten
können. Nehmen wir an, Sie wollen den Umsatz je Beschäftigtem (UMS_JE)
analysieren. Die entsprechende Variable können Sie im DATA-Step erzeugen.
Im DATA-Step unseres SAS-Programmes
DATA START3;
INFILE "HANDEL.DATEN";
INPUT NAME $ DISKONT $ UMSATZ1 ANZ_MA;
UMS_JE = UMSATZ1/ANZ_MA;
finden
Sie die Anweisung:
UMS_JE = UMSATZ1/ANZ_MA;
Sie
bewirkt, dass SAS die neue Variable UMS_JE erzeugt und die Datenmatrix um eine
Spalte erweitert.
ACHTUNG:
Die zu erzeugende Variable müssen Sie LINKS vom Zuweisungszeichen ('=')
schreiben, die Operation zum Berechnen der Variablen rechts davon.
Beachten
Sie, dass in jeder Beobachtung der Wert von UMS_JE erst berechnet werden kann,
wenn die Daten mit der INPUT-Anweisung zur Verfügung stehen.
Zum
Generieren von neuen Variablen können Sie die folgenden arithmetischen
Operatoren
**
Potenzierung
*
Multiplikation
/
Division
+
Addition
-
Subtraktion
und
Klammern benutzen. Es gelten die Ihnen von der Schulmathematik bekannten
Rechenregeln. Daneben stellt Ihnen SAS Funktionen (log, sin, etc.), logische
Operatoren und andere Möglichkeiten zur Erzeugung und Transformation von
Variablen zur Verfügung.
Sie
haben im einführenden Beispiel bereits einen SAS-Output kennengelernt: Die
Ergebnisse des Programm-Laufes fanden wir in der Datei START.lst. Eine weitere
Output-Datei, die SAS bei jedem Programm-Lauf erstellt, ist das SASLOG: Lassen
wir unser SAS-Programm START laufen, so heißt diese Datei START.LOG. Diese
Datei wird sogar erstellt, wenn Ihr SAS-Programm wegen irgendwelcher Fehler
nicht funktioniert; sie gibt Ihnen dann wichtige Hinweise zur Fehlersuche.
SAS
produziert für Sie also zwei Output-Dateien:
die SASLOG-Datei
die LISTING-Datei
Das
SASLOG beinhaltet Informationen über
die ausgeführten Anweisungen (mit Kommentaren)
die erzeugten SAS-Dateien (Zahl der Variablen und Beobachtungen)
die von den einzelnen Schritten benötigte Zeit
Meldungen über Fehler
Sie
sollten das SASLOG nach jedem Aufruf von SAS durchsehen.
Das
LISTING enthält die Ergebnisse der Datenanalysen, die von SAS in einem oder
mehreren PROC-Steps erzeugt wurden. Dort finden wir etwa das in unserem
SAS-Programm von der PROC PLOT erzeugte Streu-Diagramm, oder die Liste der
Daten, welche die PROC PRINT für uns druckt. Entdeckt SAS einen Fehler in Ihrem
SAS-Programm, so setzt es zwar den Programm-Lauf fort und überprüft den Rest
des Programms auf syntaktische Richtigkeit; weitere Fehler, die SAS entdeckt,
werden auch im SASLOG vermerkt. SAS unterdrückt aber den Output in die
LISTING-Datei. So kann es sein, dass Sie keine LISTING-Datei vorfinden. Sie
würde in unserem Beispiel den Namen SAS.LST haben.
Wenn
Sie SAS einsetzen, um Daten für Sie zu analysieren, so haben Sie folgende
Arbeiten zu erledigen:
Sie erheben die Daten und speichern sie im Computer
Sie müssen das SAS-Programm schreiben
Sie lassen Ihr Programm laufen und erhalten von SAS die
Ergebnisse.
Im
SAS-Tutorial konzentrieren wir uns auf den zweiten und dritten Schritt und
ersparen uns das Sammeln eigener Daten. Statt dessen werden wir die Daten des
Datensatzes HANDEL als Basis für Programmbeispiele und Übungsprogramme
verwenden. Ein Subset der Variablen und Beobachtungen kennen Sie bereits vom
einführenden Beispiel.
Wir
stellen Ihnen diese Daten zur Verfügung, sodass Sie keine Arbeit mit dem
Erheben und Speichern der Daten haben.
Der
folgende Absatz gilt nur für Studenten der Wirtschaftsuniversität Wien. Die
Daten finden Sie auf im Verzeichnis /u/ma1/betkurs als Datei HANDEL.DATEN. Um
mit ihnen arbeiten zu können, müssen Sie zur Maschine BETKURS den Zutritt
herstellen und die Daten in Ihre Platte kopieren. Dazu verwenden Sie den
folgendenUNIX-Befehle:
cp /u/ma1/betkurs/HANDEL.DATEN ./
BESCHREIBUNG
der VARIABLEN
In
Einzelhandelsbetrieben sind bei einer stichprobenweisen Erhebung Daten zu
folgenden Variablen erhoben worden:
Name
Typ Inhalt der Variablen
KBZ
A Kurzbezeichnung des
Betriebes
PLZ
N Postleitzahl des
Betriebs-Standortes
ORT
A Standort des Betriebes
DISKONT
A Diskonter (J,N)
FLACH
N Verkaufsfläche in
Quadratmetern
UMS1
N Umsatz in Food-Artikeln
UMS2
N Umsatz in Nonfood-Artikeln
ANZ_BE
N Anzahl der Mitarbeiter
INDUST
A Industriealisierung des
Standortes (A,B,C)
Der
(Daten-) Typ jeder Variablen kann numerisch (N) oder alphanumerisch (A) sein.
Den Wertebereich der einzelnen Variablen entnehmen Sie bitte der Datei. Die Merkmalsausprägungen
der Variablen DISKONT sind J (ja)oder N (nein). Die Variable INDUST ist ein
Indikator: Ihre Merkmalsausprägungen sind A (über 50 %), B (30 bis 50 %) und C (weniger als 30% der
Arbeitnehmer sind in der Industrie beschäftigt).
Zur
Illustration und Orientierung zeigen wir Ihnen hier die ersten drei Datensätze:
KBZ PLZ
ORT DISKONT FLACH
UMS1 UMS2 ANZ_BE
INDUST
MM 1010
Wien N 180
156 85 22
C
MK 1100
Wien J 220
856.5 102 24 B
KJ 1130
Wien J 170
230 . 11
C
etc.
Beachten
Sie, dass einzelne Werte unbekannt sein können (der Wert war bekannt, die
Antwort wurde verweigert, die Frage ist unzutreffend, etc.). In der dritten
Beobachtung fehlt der Wert von UMS2; das Zeichen '.' weist auf den fehlenden
Wert hin.
ALLGEMEINES
Wenn
Sie die Lektionen "Für den eiligen Benutzer" aufmerksam gelesen
haben, sollten Sie in der Lage sein, ein SAS-Programm für die unten beschriebene
Aufgabe zu schreiben und laufen zu lassen. Die Aufgabe bezieht sich auf den
Datensatz HANDEL.
Schreiben
Sie ein SAS-Programm PREMIERE SAS:
1.
Im
DATA-Step Ihres Programms soll SAS die folgenden Variablen von der Datei HANDEL
DATEN lesen:
Verkaufsfläche (FLACH)
Umsatz in Food-Artikeln (UMS1) und
Umsatz in Nonfood-Artikeln (UMS2).
2.
Dann
generieren Sie die Variable UMSATZ, die den Gesamtumsatz jedes Betriebes
enthält. Beachten Sie: Um selektiv nur diese drei Variablen zu lesen, müssen
Sie eine spaltenorientierte INPUT-Anweisung verwenden.
3.
Im
PROC-Step lassen Sie SAS zuerst eine Liste aller Daten drucken.
4.
Dann
soll SAS ein Streu-Diagramm aller Beobachtungen erstellen, in dem auf der
horizontalen Achse die Verkaufsfläche und auf der vertikalen Achse der
Gesamtumsatz aufgetragen sind.
5.
Lassen
Sie Ihr SAS-Programm laufen.
6.
Besprechen
Sie den Output mit einem Kollegen.
Der
DATA-Step in einem SAS-Programm dient zum Aufbereiten der Daten zur Analyse in
nachfolgenden "Procedure"-Schritten (in SAS kurz
"PROC-Steps" genannt). Das Ergebnis des DATA-Step ist eine SAS-Datei.
Im
DATA-Step können Sie SAS unter anderem folgende Aufgaben ausführen lassen:
1.
Das
Einlesen, Speichern und Wiederauffinden von Daten
2.
Das
Aufbereiten und Bearbeiten von Daten
3.
Das
Erstellen von Reporten
Im
einzelnen sind das die folgenden Aufgaben:
SAS
kann Daten von verschiedenen Quellen bzw. Medien (Magnetplatte,-band) lesen. Die Daten werden dabei in einer
temporären oder permanenten SAS-Dateien gespeichert.
In SAS
können arithmetische und logische Ausdrücke und Funktionen zum Bearbeiten der
Daten verwendet werden. Die Abfolge der Verarbeitungen kann durch
Steueranweisungen (DO/END, IF THEN/ELSE, etc.) gestaltet werden. Daher wird von
Programmierung in SAS gesprochen. Der DATA-Step kann insbesondere dazu
verwendet werden, fehlerhaften Daten zu identifizieren und eventuell zu
korrigieren.
Daten,
die im DATA-Step eines SAS-Programms eingelesen oder als Ergebnis von
statistischen Verarbeitungen in einem PROC-Step erhalten wurden, können in
vielfältiger Weise formatiert und mit einem flexibel gestaltbaren Layout
ausgegeben werden. Damit können Reporte erstellt werden.
Daten
bestehen entweder aus Zahlen (numerische Daten) oder aus Kombinationen von
Buchstaben und Ziffern (alphanumerische Daten). In einer SAS-Datei werden Daten
in Form einer DATENMATRIX dargestellt: Den Spalten entsprechen die VARIABLEN,
den Zeilen die BEOBACHTUNGEN.
Beispiel:
In der Erhebung einer Betriebs-Statistik werden u.a. die Verkaufsfläche UT und
die Mitarbeiteranzahl TT der Betriebe registriert. Verkaufsfläche und
Mitarbeiteranzahl sind Variable und entsprechen den Spalten der SAS-Datei.
Beobachtungen sind die Daten der verschiedenen Betriebe; sie bilden die Zeilen
der SAS-Datei.
VARIABLENNAMEN:
Die Variablen werden in einem SAS-Programm mit Variablennamen angesprochen. Ein
Variablennamen besteht aus
einem bis acht Zeichen
und muss mit einem Buchstaben beginnen.
Die
weiteren Zeichen können Ziffern, Buchstaben oder das Sonderzeichen
"_" (underscore) sein. Andere Sonderzeichen sind nicht erlaubt.
Beispiele
für Variablennamen:
gültige Variablennamen sind
H,
H12, H12A, H_12A;
keine gültigen Variablennamen sind
12H (beginnt nicht mit einem
Buchstaben), MITARBEITER (mehr als
8 Zeichen), STÜCK (enthält ein
Sonderzeichen).
Die
Daten können
Teil des SAS-Programms sein,
von einer Betriebssystemdatei eingelesen werden,
in einer (permanenten) SAS-Datei zur Verfügung stehen.
In
einer permanenten SAS-Datei gespeicherte Daten sind SAS-spezifisch formatiert;
sie können im DATA-Step eines SAS-Programms oder in einem PROC-Step gelesen und
bearbeitet werden so, als wären sie in einem DATA-Step des gleichen
SAS-Programms erstellt worden. Eine permanente SAS-Datei hat wie jede SAS-Datei
die Form einer Datenmatrix; mit ihr sind auch die entsprechenden Variablennamen
gespeichert.
In den
Fällen, in denen die Daten Teil des SAS-Programms sind oder aus einer
Betriebssystemdatei eingelesen werden sollen, muss in einer INPUT-Anweisung
spezifiziert werden, unter welchen Namen die Daten im SAS-Programm angesprochen
und in welcher Anordnung sie zur Verfügung gestellt werden. Zum Eingeben und
Aufbereiten von Daten wird ein am EDV-System verfügbarer Editor verwendet.
Achtung:
Manche Editoren (z.B. MS-WORD) speichern im Standard-Speichermodus mit den
eingegebenen Daten Formatierungszeichen, die von SAS nicht interpretiert werden
können. Allerdings erlauben solche Editoren zumeist auch das Abspeichern als
ASCII-Datei, die von SAS interpretiert werden kann.
Beispiele
für den DATA-Step:
DATA; /* SAS-Programm 1 zum
Einlesen von Daten, */
/* die Teil des SAS-Programmes sind. */
INPUT NAME $ MAT_NR ANZ_SEM; /*
Spezifikation der Variablen */
CARDS; /* CARDS-Anweisung */
BEATE 801031 3 /* Daten
*/
KURT 853097 1
.....
(etc.)
; /* Ende der Daten */
Beachte:
Die zwischen "/*" und "*/" gestellten Texte sind
Kommentare
und werden von SAS nicht weiter bearbeitet.
DATA; /* SAS-Programm 2 zum Einlesen von Daten aus der */
/* Betriebssystemdatei
"STUDENT.DATEN". */
INFILE 'student.daten'; /* Anweisungen
ermoeglichen den Zugriff auf */
/* die Betriebssystemdatei
*/
INPUT NAME $ 1-8 MAT_NR 9-14 ANZ_SEM 16-18;
/* die Zahlen */
/* nach den
Variablen-Namen geben die Spalten an, */
/* in denen die Daten
enthalten sind. */
Die
Betriebssystemdatei "STUDENT.DATEN" enthält folgende Daten:
BEATE 801031 3
KURT 853097 1
.....
(etc.)
Beide
SAS-Programme erzeugen eine temporäre SAS-Datei mit den drei Variablen NAME,
ANZ_SEM und MAT_NR. INPUT-Anweisungen mit Formatanweisungen und weiteren
Spezifikationen der Struktur der Betriebssystemdatei, welche die gleiche
temporäre SAS-Datei erzeugen, sind:
INPUT @1 NAME $8. @16 ANZ_SEM 3. @9 MAT_NR
5.;
INPUT NAME $ ANZ_SEM 16-18 @9 MAT_NR 5.;
Zu
Formatanweisungen und Spezifikation der Struktur der Betriebssystemdatei siehe
unten.
Sie
spezifiziert die Variablen-Namen, unter denen die im DATA-Step gelesenen Daten
im SAS-Programm angesprochen werden. Außerdem spezifiziert sie die Anordnung
der Daten.
Beim
listenorientierten Input (vergl. die INPUT-Anweisung des SAS-Programms 1) sind
die Daten durch Leerzeichen getrennt und in einem Datensatz oder in einer Zeile
dargestellt. Die Regeln lauten:
Jede Zeile enthält genau eine Beobachtung.
Die Daten müssen nicht spaltengenau angeordnet sein.
Numerische
Daten werden als Integer- (ganze) oder Dezimalzahlen gelesen, von
alphanumerische Daten nur die ersten acht Stellen, soferne keine
Formatanweisungen spezifiziert sind.
Der
listenorientierte Input ist bei wenig datenintensiven Anwendungen vorteilhaft.
Die Daten müssen nicht spaltengenau eingegeben werden, sie müssen allerdings
durch Leerzeichen getrennt sein. Bei alphanumerischen Variablen darf kein
Leerzeichen vorkommen (z.B.: Karl Meier).
Beim
spaltenweisen Input hingegen müssen die Daten im SAS-Programm oder in der
Betriebssystemdatei spaltenorientiert angeordnet sein. Einer der Vorteile
dieser Inputart ist die große Übersichtlichkeit und damit geringe
Fehleranfälligkeit und einfache Korrigierbarkeit der zu lesenden Daten. Diese
Art der Input-Gestaltung ist die wohl am häufigsten verwendete.
Syntax
der Input-Anweisung:
INPUT VAR1 /formatdefinition/
/spezifikation/ ...
dabei
ist VAR1 ein Variablenname; zu Formatdefinition und Spezifikation siehe das
Folgende. Variablenname und Formatdefinition sind durch Leerzeichen zu trennen.
Siehe
auch "INPUT-Anweisung" in SAS USER'S GUIDE: BASICS.
Eine
Formatdefinition besteht aus dem Formatnamen und einer Längenangabe; sie wird
mit einem Punkt abgeschlossen. Formatdefinition ähneln der Variablenfestlegung
in höheren Programmiersprachen (FORTRAN, Pascal).
Beispiele
für Formatdefinitionen:
4.
(vierstellige ganze Zahl)
6.3
(sechsstellige Deziamlzahl mit drei Nachkomma-Stellen)
E12.3
(Exponentialdarstellung mit drei Nachkomma-Stellen)
$15.
(maximal 15 alphanumerische Zeichen werden linksbündig (|)
in einem Feld der Laenge 15
gespeichert)
$CHAR12.
(12 alphanumerische Zeichen werden (einschließlich der
enthaltenen Leerzeichen) in einem
Feld der Länge 12
gespeichert)
YYMMDD6.
DATE8.
TIME.
Achtung:
Bei einer den Daten nicht entsprechenden Formatdefinition in der INPUT-Anweisung
erhält man falsche oder gar keine Ergebnisse, nicht unbedingt aber eine
Fehlermeldung!
Beim
formatierten INPUT können für jede Variable neben einer Formatdefinition die
Spalten und Zeilen spezifiziert werden, in denen in
der zu
lesenden Datei die entsprechenden Daten enthalten sind
(siehe
obiges SAS-Programm 2 und die nachfolgenden Beispiele).
Wir
unterscheiden zwei Arten dieser Spezifikation:
Spaltenkontrolle, z.B. "@n" (lies beginnend in Spalte
n),"+n" (lies beginnend n Spalten weiter rechts)
Zeilenkontrolle, z.B. "/" (lies in der nächsten Zeile),
"#n" (lies in der
n-ten Zeile der Beobachtung)
Beachte,
dass die Daten jeder Beobachtung über mehr als eine Zeile des SAS-Programms
oder der zu lesenden Betriebssystemdatei verteilt sein können. Die zu lesende
Zeile wird mit den Spezifikationen der Zeilenkontrolle angegeben.
Die
CARDS-Anweisung gibt an, dass die zu analysierenden Daten Teil des
SAS-Programms sind und in den nachfolgenden Programmzeilen enthalten sind. Die
CARDS-Anweisung muss -- mit Ausnahme der Daten -- die letzte Anweisung des
DATA-Steps sein (siehe obiges SAS-Programm 1).
Die
Länge der Datenzeilen darf 80 Zeichen nicht überschreiten. Das Ende der Daten
wird durch ";" markiert. Achtung: Daten in jener Zeile, in der sich
der ";" befindet, werden nicht mehr gelesen! Es empfiehlt sich daher,
den abschließenden Strichpunkt in eine eigene Zeile zu schreiben.
Literatur: CARDS-Anweisung in SAS USER'S GUIDE:
BASICS.
Vor dem
Einlesen einer neuen Beobachtung werden alle Variable auf "missing
value" gesetzt: In einem Ausdruck der Datei erscheint ein solcher Wert als
".". Werden in einer Beobachtung für eine Variable keine oder
ungültige (z.B. nicht der Formatspezifikation entsprechende) Daten eingelesen,
so bleibt der Wert auf "missing value".
Bei
numerischen Variablen können "missing values" außer durch das
Einlesen eines Leerzeichens oder von "." in einer der folgenden
Weisen entstehen:
1.) durch explizite Anweisung
Beispiel:
A=.;
2.) durch arithmetische Operationen, wenn
einer der Operanden
auf "missing value" gesetzt
ist
Beispiel:
A=3;
B=.;
C=A*B;
C
enthält "missing value".
3.) durch Fehler bei Zuweisungen
Beispiel:
A=3;
B=0;
C=A/B;
C
enthält "missing value".
Beachte:
Eine arithmetische Operation liefert "missing value", wenn einer der
Operanden selbst ein "missing value" ist.
Beachte
weiter: Allerdings liefern Funktionsaufrufe nicht notwendigerweise
"missing
value", wenn eines der Argumente ein "missing value" ist.
Beispiel:
A=3;
B=.;
C=SUM(A,B);
als
Ergebnis der Summenfunktion SUM enthält C den Wert "3"; hingegen
würde C=A+B; für C "missing value" liefern!
Auf das
Auftreten von "missing values" wird im SASLOG hingewiesen.
Zur
Ergebnis von SAS-Prozeduren bei der Verarbeitung von "missing value"
siehe das entsprechende Handbuch. Beachte, dass "missing value" in
SAS-Proceduren verschieden behandelt werden.
Literatur: MISSING VALUES in USER'S GUIDE: BASICS.
SAS
stellt dem Anwender vorgefertigte Funktionen zur Verfügung, die
Standardberechnungen vornehmen. Wir unterscheiden folgende Typen:
arithmetische (SUM MAX MIN MOD SQRT)
Rundungsfunktionen (INT CEIL FLOOR
ROUND)
mathematische (EXP GAMMA LOG LOG2
LOG10)
trigonometrische (SIN COS TAN SINH COSH TANH
ARSIN ARCOS ARTAN)
Wahrscheinlichkeitsfunktionen
(POISSON PROBETA PROBF PROBNORM)
statistische
(MEAN N NMISS STD VAR RANGE CV SKEWNESS)
Zufallszahlen (RANNOR NORMAL RANBIN
RANPOI RANUNI UNIFORM)
String
(LEFT RIGHT SUBSTR LENGTH)
Datum
(DATE DAY HOUR TIME)
Kommunikation mit dem
Betriebssystem (CMS X)
Jede
Funktion erwartet zumindest ein Argument, dieses ist in Klammer zu setzen.
DATA FUNKT;
INPUT A B C X$ Z$;
E1
= SUM(A, B, C);
E2
= COS (A);
/* Zufallszahlengeneratoren
bedürfen eines Startwertes */
E3 = UNIFORM (345678);
/* Datumsfunktionen liefern die
Tagesanzahl seit dem
1. 1. 1960, daher sollte das Ergebnis formatiert
werden */
E4 = DATE (); FORMAT E4 DATE7.;
E5 = LENGTH('ABCDEF');
Beachte!
Funktionsaufrufe liefern nicht notwendigerweise "missing value", wenn
eines der Argumente ein "missing value" ist.
A = 3;
B = .;
C = SUM(A, B);
D = A + B;
als Ergebnis der Summenfunktion SUM
enthält C den Wert "3";
hingegen hat D den Wert "missing
value"!
Oft
wollen wir die in der Datenmatrix enthaltenen Variablen vor der eigentlichen
Analyse (durch arithmetische oder logische Operationen) verändern oder aus den
verfügbaren Beobachtungen bestimmte auswählen. Solche Modifikationen der Daten
werden in Programmanweisungen spezifiziert, in denen einer (neuen oder schon
definierten) Variablen das Ergebnis eines SAS-Ausdruckes zugewiesen wird, bzw.
aus den verfügbaren Daten die interessierenden ausgewählt werden.
Programmanweisungen stehen nach der INPUT-Anweisung und gegebenenfalls vor der
CARDS-Anweisung.
Beispiele
zur Modifikation der Variablen:
Der Gesamtumsatz (GES_UMS) ergibt sich aus
UMS1 und UMS2:
GES_UMS=UMS1 + UMS2;
Der Umsatz je Quadratmeter (UMS_M2) ergibt
sich aus GES_UMS
dividiert durch die FLAECHE:
UMS_M2=GES_UMS / FLAECHE
Umrechnung von UMS1 im DM:
UMS1=UMS1 * 7;
Im letzten
Beispiel wird der Wert von UMS1 durch den neuen Wert ersetzt.
Beispiel
zur Auswahl von Beobachtungen:
Aus der
Datenmatrix von österreichischen Betrieben sollen die Daten der Wiener Betriebe
ausgewählt werden. Siehe IF-Anweisung tieferstehend.
Programmanweisungen
zum Modifizieren von Variablen oder Generieren von neuen Variablen bestehen aus
einem SAS-Ausdruck, dessen Wert für jede Beobachtung ermittelt und der
fraglichen Variablen zugewiesen wird. Zur Steuerung der Reihenfolge, in der die
Programmanweisungen abgearbeitet
werden, können wir von Steueranweisungen Gebrauch machen.
Unter
einem SAS-Ausdruck versteht man:
eine Konstante oder Variable
eine auf numerische Konstante oder Variable angewendete
arithmetische Operation
eine auf Konstante oder Variable angewendete logische Operation
eine String-Operation
einen Funktionsaufruf
Operanden
einer arithmetischen Operation können Konstante oder Variable (oder wiederum
ein SAS-Ausdruck) sein. Ist der Operand alphanumerisch oder nicht-numerisch, so
wendet SAS die in der Tabelle stehenden Konversionsregeln an.
Tabelle
der Konversionsregeln
nachher | numerisch alphanum.
vorher| |
--------------------------------------------------------
numerisch |
numerisch ?
alphanum. |
numerisch alphanum.
nicht
num. | "mis.val."
alphanum.
Die
Operanden können mit den üblichen Operatoren (+, -, *, /, **) verknüpft werden.
Der Wert des Ausdrucks wird unter Verwendung der üblichen Prioritäten der
Operatoren ermittelt, wobei Klammern in gewohnter Weise erlaubt sind. Achtung!
Multiplikationen im Nenner eines Quotienten setzen Sie am besten in Klammern.
Tabelle
der Arithmetische Operationen
Operation Beispiel in SAS
Prioritätsstufe 1
Exponentiation Y=X**X
Maximum K=A<>B
Minimum K=A><B
Vorzeichenumkehr Z=-A
Prioritätsstufe 2
Multiplikation A=B*C
Division G=H/I
Prioritätsstufe 3
Addition R=S+T
Subtraktion U=J-X
Logische
Operationen führen einen Vergleich zwischen zwei Ausdrücken durch.
Das
Ergebnis der Operation ist "1", wenn die Operation richtig ist,
ansonsten "0".
Beispiel:
DATA
TEST;
A='M';
B='W';
U=A NE B;
V=A EQ B;
W=A LE B;
das
ERGEBNIS ist:
U=1,
V=0, W=1 (zur Berechnung von W werden die Bitmuster numerisch verglichen).
Bei der
Bestimmung des Ergebnisses einer logischen Operation ist die
Prioritätsstufe
der Operatoren zu beachten.
Tabelle
der logischen Operationen
Prioritätsstufe 1
NOT
Prioritätsstufe 5
=
EQ gleich
NE ungleich
>
GT größer als
<
LT kleiner als
>=
GE größer oder gleich
<=
LE kleiner oder gleich
Prioritätsstufe 6
&
AND und-Verknüpfung
Prioritätsstufe 7
|
OR oder-Verknüpfung
Beachte!
Die Prioritätsstufen der arithmetischen Operationen sind höher als die der
logischen Operationen.
Beispiel:
A=3;
B=2;
A*3 LT B+6
hat den
Wert 1 (ist richtig).
Die
einzige String-Operation ist das Verknüpfen oder die Verkettung
("||") von Zeichenketten ("strings").
Beispiel:
A='HAUS';
B='GAST';
C=B||A;
C hat
den Inhalt 'GASTHAUS'
Die
Prioritätsregeln entsprechen den arithmetischen Operationen.
Es
steht die folgende Funktion zur Verfügung:
Beachte!
Fehlt auf der Tastatur Ihres Computers das Zeichen " ", so verwenden
Sie anstelle von " " das Zeichen "|".
Die
Operation "||" hat die Prioritätsstufe 4.
Zum
Bearbeiten von Zeichenketten steht eine große Anzahl von Funktionen zur
Verfügung (siehe das Kapitel "SAS-Functions" in SAS USER'S GUIDE:
BASICS).
In SAS
können gleichartige Variablen unter einem gemeinsamen Namen angesprochen
werden.
Beispiel
AUFGABENSTELLUNG
Es
sollen für jede Beobachtung zehn Werte eingelesen und davon der kleinste
bestimmt werden. Nach dem bisher Gelernten können dazu die folgenden
Anweisungen verwendet werden.
DURCHFUEHRUNG:
INPUT F1 F2 F3 F4 F5 F6 F7 F8 F9 F10;
B = MIN(F1, F2, F3, F4, F5, F6, F7, F8, F9,
F10);
Gleiches
leistet folgende Anweisungen im DATA-Step:
INPUT F1-F10;
B=MIN(OF
F1-F10);
Bei den
Variablen F1, F2 ..., F10, geschrieben als F1-F10, sprechen wir von einer
GRUPPIERUNG. Ihre Verwendung reduziert den Schreibaufwand.
Eine
weitere Möglichkeit der verkürzten Schreibweise sind INDIZIERTE BEREICHE. Eine
ARRAY-Anweisung definiert den gemeinsamen Namen der in der Elementliste
angeführten Variablen des Bereiches. Die Elemente des Bereiches können mittels Indizes angesprochen werden.
Beispiel:
ARRAY X (*) F1-F10; /* definiert den indizierten Bereich X */
A=X(5);
/* A enthält das fünfte Elemente des Bereichs X */
Gleiche
Wirkung hat die Anweisung
A=F5;
In der
geschwungenen Klammer nach dem Bereichsnamen steht die Zahl der Elemente des
Bereiches ("Dimension" des Bereiches). Schreibt man anstelle der
Dimension "*", so stellt SAS die Zahl der Elemente des Bereiches
fest. Die ARRAY-Anweisung sollte stets am Anfang des DATA-Steps stehen.
Die
DIM-Funktion gibt die Dimension des Bereiches zurück.
Beispiel:
ARRAY TEST
(*) F1-F10 N1-N100 X1-X10;
DO I = 1 TO
DIM(TEST);
TEST(I) =
I * 2;
END;
Als
Ergebnis enthalten F1 bis F10 die geraden Zahlen 2 bis 20, N1 bis N100 die
Zahlen 22 bis 220, und X1 bis X10 die Zahlen 222 bis 240. Zur DO-Anweisung
siehe später.
Beachte!
Die Elemente des Bereiches können sowohl unter ihrem Namen als auch als
indiziertes Element des Bereichs angesprochen werden.
Beachte!
Der Name des Bereiches kann nicht ohne Indizierung verwendet werden.
Beispiel:
ARRAY TEST
(*) F1-F10 N1-N100 X1-X10;
A=N1;
B=TEST(11);
A und B
enthalten den gleichen Wert.
An der
WU können statt geschwungener auch runde Klammern gesetzt werden - wie wir dies
auch in unseren Beispielen getan haben.
Um die
Portabilität der Programme zu erhöhen, sollten jedoch - soferne es das Terminal
zulässt, was in der derzeitigen Emulation jedoch leider nicht möglich ist, -
die richtigen Klammern gesetzt werden. Die SAS-Version 6 erwartet, dass stets
die richtigen Klammern gesetzt werden.
Beachte!
Die Schachtelung von indizierten Bereichen ist nicht möglich.
Die
IF-Anweisung dient der Steuerung des Ablaufes des DATA-Steps; sie werden
verwendet, wenn eine oder mehrere Anweisungen nur für die einer bestimmten
Bedingung entsprechenden Beobachtungen durchgeführt werden sollen.
Sie hat
die Form
IF Bedingung THEN Anweisung;
Beispiel:
IF B_LAND='V' OR B_LAND='T' THEN
REGION='WESTEN';
Für
jede Beobachtung, für welche die Bedingung (B_LAND='V' OR B_LAND='T') zutrifft,
wird die Anweisung (REGION = 'WESTEN') ausgeführt.
Bedingung
kann
eine logische Operation (z.B.: A > B)
eine intervallbezogene logische Operation (z.B.: 5 < A < 10
- die Ungleichung steht für A > 5
AND A < 10)
eine Variable (die Bedingung gilt als falsch, wenn der Wert der
Variablen "0" oder "missing
value" ist; sonst ist sie richtig),
oder
AND-, OR- und NOT-Verknüpfungen der oben angeführten Operationen
Anweisung
ist eine Programmanweisung; sie wird ausgeführt, wenn die Bedingung erfüllt
ist.
Sie hat
die Form
IF Ausdruck THEN Anweisung; ELSE Anweisung;
Beispiel:
IF B_LAND='V' OR B_LAND='T' THEN REGION =
'WESTEN';
ELSE REGION = 'SONST ';
Beachte!
Die Variable REGION hat die Länge des Strings, der ihr beim ersten Ausführen
zugewiesen wird.
Die
THEN-Anweisung wird auch als Wahrzweig, die ELSE-Anweisung als Falschzweig
bezeichnet. Die Schachtelung mehrerer IF ist sowohl im Wahr- als auch im
Falschzweig möglich.
Es hat
die Form
IF Ausdruck;
Beispiel:
IF A='weiblich';
Es
werden nur jene Beobachtungen in der Datenmatrix behalten, bei denen gilt:
A='weiblich'
Das
'Subsetting IF' eliminiert jene Beobachtungen aus der Datenmatrix, für welche
die Bedingung nicht erfüllt ist.
Die
SELECT-Anweisung ist eine verallgemeinerte IF-Anweisung: In ihr können mehr als
zwei Zweige ausgeführt werden.
Beispiel:
SELECT (A);
WHEN (1) B
= 3;
WHEN (2) ;
WHEN (3) B
= 4;
OTHERWISE B
= 0;
END;
Wenn A
einen anderen Wert als 1, 2 oder 3 hat, wird B=0 gesetzt; gilt A=1, so setzt
SAS B auf 3; bei A=2 bleibt B auf "missing value", etc.
Die
Anweisung ist mehrstufig und umfasst:
eine SELECT-Anweisung (SELECT (Ausdruck))
eine oder mehrere WHEN-Anweisung (WHEN (Ausdruck) Anweisung)
gegebenenfalls eine OTHERWISE-Anweisung (OTHERWISE Anweisung)
und am Schluss eine END-Anweisung
In der
SELECT-Anweisung kann ein beliebiger SAS-Ausdruck stehen, dessen Wert für die
Auswahl der auszuführenden Anweisung entscheidend ist. Ebenso kann in der
WHEN-Anweisung ein beliebiger SAS-Ausdruck stehen. Der Wert des Ausdruckes der
SELECT-Anweisung wird berechnet und anschließend mit dem der einzelnen
WHEN-Anweisungen verglichen. Ist der Wert gleich, so wird die SAS-Anweisung des
WHEN-Zweiges ausgeführt.
Beachte!
Sind mehrere WHEN-Klauseln richtig, so wird nur die erste zutreffende
ausgeführt.
Sind
alle WHEN-Klauseln falsch, so wird die OTHERWISE-Anweisung ausgeführt.
Beachte!
Ist keine der WHEN-Klauseln richtig und keine OTHERWISE-Anweisung vorhanden, so
meldet SAS einen Fehler.
SELECT-Anweisungen
können auch geschachtelt werden.
Sollen
in einer IF-Anweisung mehrere Anweisungen ausgeführt werden, so ist das mittels
einer DO-Gruppe möglich: die Anweisungen können zu einer DO-Gruppe
zusammengefasst werden. Die Gruppe wird mit der END-Anweisung abgeschlossen.
Beispiel:
IF ARB_ZEIT > 38.5 THEN DO;
UE_ZEIT = ARB_ZEIT - 38.5;
N_ZEIT = 38.5;
END;
ELSE DO;
UE_ZEIT = 0;
N_ZEIT = ARB_ZEIT;
END;
Die in
beiden in DO-END eingeschlossenen Folgen von Anweisungen bilden zwei
DO-Gruppen.
Beispiel:
AUFGABENSTELLUNG
In
einem Fragebogen tragen die Eltern das Alter von bis zu 10 Kindern ein. Zur
Ermittelung der Zahl der Kinder wird folgendes Programm verwendet:
DATA KINDANZ;
ARRAY
K_ALTER (10) K1-K10;
INPUT ...
K1-K10 ...;
KINDER_Z=0;
DO I=1 TO
10;
IF
K_ALTER(I) NE . THEN KINDER_Z = KINDER_Z +1;
END;
Die
DO-Anweisung bearbeitet die Daten jeder Beobachtung in dieser Weise. Es gibt
mehrere DO-Anweisungen (DO WHILE, DO UNTIL, iteratives DO), die sich durch die
Art unterscheiden, in der SAS feststellt, ob noch ein weiterer Durchlauf der
Schleife notwendig ist.
Sie hat
die Form
DO WHILE (bedingung); anweisungen; END;
Beispiel:
DATA KINDANZ;
ARRAY K_ALTER (10) K1-K10;
I = 1;
KINDER_Z = 0;
DO WHILE (K_ALTER(I) NE .);
KINDER_Z = KINDER_Z + 1;
I = I + 1;
END;
Die
bedingte Schleife wird solange ausgeführt, bis die Bedingung erstmals falsch
ist. Die DO WHILE-Schleife muss durch eine END-Anweisung, geschlossen werden.
Beachte!
Die DO WHILE-Schleife wird überhaupt nicht durchlaufen, wenn die Bedingung bei
der ersten Prüfung falsch ist.
Sie hat
die Form
DO UNTIL (bedingung); anweisungen; END;
Beispiel:
DATA KINDANZ;
ARRAY K_ALTER (10) K1-K10;
I = 1;
KINDER_Z = 0;
DO UNTIL (K_ALTER(I)=.);
KINDER_Z = KINDER_Z + 1;
I=I + 1;
END;
Die
Schleife wird solange ausgeführt, bis die Bedingung erstmals erfüllt ist. Die
Bedingung wird nach dem Durchlaufen der Schleife geprüft, sodass die Schleife
mindestens einmal (|) durchlaufen wird. Die DO UNTIL-Schleife wird - wie die DO
WHILE-Schleife - durch eine END-Anweisung geschlossen werden.
Hier
nimmt der Schleifenzähler die durch einen Startwert, einen Endwert und ein
Increment bestimmten Werte oder in einer Liste vorgegebene Werte an. Die Schleife wird für jeden Wert des Schleifenzählers
einmal durchlaufen.
Beispiele:
(in
Klammern sind die Werte angegeben, für die welche Schleife durchlaufen wird):
DO I=1 TO 10; /* I nimmt die Werte 1, 2, ..., 10 an */
DO K=1 TO 10 BY 2; /* 1, 3, 5, 7, 9 */
DO ZAEHLER=1
TO 2 BY 0.2 WHILE (J NE .); /* 1, 1.2, 1.4, 1.6,
1.8, 2, solange J nicht "missing value" */
DO I=1, 10, 100; /* 1, 10 , 100 */
DO
ALPHA='JAN', 'FEB', 'MAR'; /* JAN, FEB, MAR */
Startwert,
Endwert und Increment können auch durch Variable bestimmt sein. Das Increment
kann auch negativ sein.
Beispiel:
I0 = 10;
IEND = 5;
INC = -2;
DO I = I0 TO
IEND BY INC;
Der
Schleifenzähler nimmt die Werte 10, 8 und 6 an.
Veränderungen
von Startwert, Endwert und Increment während der Schleifendurchläufe haben
keinen Einfluss auf den Schleifenzähler (die Werte werden vor Ausführung der
Schleife bestimmt).
Zum
Abbruch der Iterative DO-Anweisung muss man den Wert des Schleifenzählers auf
den Endwert setzen.
Beachte!
Das Zutreffen der Bedingung wird vor dem Durchlaufen der Schleife geprüft.
Beispiel:
I0 = 10;
IEND = 5;
INC = 2;
DO I = I0 TO
IEND BY INC;
Die
Schleife wird nicht durchlaufen|
Im folgenden
werden einige Möglichkeiten behandelt, mit denen die im DATA-Step erzeugte
Datenmatrix durch Eliminieren von Variablen und/oder Beobachtungen modifiziert
werden kann.
Zum
Eliminieren von Variablen können die DROP- und KEEP-Anweisung verwendet werden.
Sie hat
die Form
DROP variablenliste;
Die in
der Variablenliste angegebenen Variablen werden nicht in die Datenmatrix
aufgenommen.
Beispiel:
DATA WEG;
INPUT UMS1 UMS2;
GES_UMS = UMS1 + UMS2;
DROP UMS1 UMS2;
Die
Datenmatrix enthält nur die Variable GES_UMS.
Sie hat
die Form
KEEP variablenliste;
Nur die
in der Variablenliste der KEEP-Anweisung angeführten Variablen werden in der
Datenmatrix behalten.
Beispiel:
DATA;
INPUT UMS1 UMS2;
GES_UMS = UMS1 + UMS2;
KEEP GES_UMS;
Die
Datenmatrix enthaelt nur die Variable GES_UMS.
Die
Wahl zwischen DROP- und KEEP-Anweisung wird sich nach der Länge der
Variablenliste richten.
DROP-
oder KEEP-Parameter können verwendet werden, um Variablen auszuwählen; das ist
besonders vorteilhaft, wenn mehr als eine SAS-Datei erstellt werden soll.
Beispiel:
Die Anweisung
DATA
EINS (DROP=I J K) ZWEI (KEEP=A B C D) DREI (DROP=A C D);
generiert
die Dateien EINS, ZWEI und DREI mit entsprechenden Variablen.
Die
OUTPUT-Anweisung hat die Form
OUTPUT datei1 (datei2 ...);
'datei1',
'datei2', ... sind Namen von SAS-Dateien.
Mit der
OUTPUT-Anweisung können die in der zu generierenden SAS-Datei enthaltenen
Beobachtungen festgelegt werden. Dabei unterscheiden wir folgende Anwendungen:
Zerlegen einer Beobachtung der INPUT-Daten in mehrere
Beobachtungen der generierten
SAS-Datei
Eliminieren bestimmter Beobachtungen
mehrfache Ausgabe einer Beobachtung
Beispiel
(1) für das Zerlegen der INPUT-Daten:
DATA
UMSATZ;
ARRAY UMSQ (*) Q1-Q4;
INPUT Q1-Q4 JAHR;
DO I = 1 TO 4;
UMS = UMSQ(I);
OUTPUT;
END;
DROP Q1-Q4;
Die
SAS-Datei UMSATZ enthält die Variablen JAHR, I (für das Quartal)und UMS.
Beispiel
(2) für das Eliminieren bestimmter Beobachtungen:
DATA
POP;
INPUT BUNDLAND $ 1-3 STADT $ 4-12 EINWOHN
13-19;
IF BUNDLAND = 'TIR' THEN OUTPUT;
CARDS;
WIEWIEN
1560000
TIRZELL/ZILL 1230
;
Die
SAS-Datei POP enthält nur den Satz 'TIR'. In diesem Beispiel würde jede der
Anweisungen
IF BUNDLAND = 'TIR' THEN OUTPUT;
IF BUNDLAND
= 'TIR'; /* 'subsetting IF' */
zum
gleichen Ergebnis führen.
Beispiel
(3) für die mehrfache Ausgabe einer Beobachtung:
AUFGABENSTELLUNG:
In die
Datei INVENT sollen alle Beobachtungen aufgenommen werden. In die Datei BESTELL
nur jene, bei denen der IST-Lagerbestand geringer als der Mindestlagerbestand
ist. In die Datei FEHL sollen jene Beobachtungen aufgenommen werden, bei denen
SOLL- und IST-Bestand (Inventurdifferenz) nicht gleich sind.
DATA
INVENT BESTELL FEHL;
INPUT ART_NR IST SOLL MINDEST;
OUTPUT INVENT;
IF MINDEST
< IST THEN DO;
B_MEN = MINDEST - IST;
OUTPUT BESTELL;
END;
IF IST NE SOLL
THEN OUTPUT FEHL;
CARDS;
...........
;
Beachte|
Ein 'subsetting IF' kann hier nicht die OUTPUT-Anweisung er-
setzen
wie im letzten Beispiel.
Beachte|
Es kann nur auf jene Datenbestände geschrieben werden, die auch in der
DATA-Anweisung definiert worden sind.
Findet
SAS im DATA-Step eine OUTPUT-Anweisung, so erfolgt die Ausgabe nicht, wie bisher
gewohnt, automatisch nach der letzten Anweisung des DATA-Steps, sondern immer
dann, wenn die OUTPUT-Anweisung im Programmablauf durchlaufen wird.
Sie hat
die Form
DELETE;
Die
Beobachtung, für welche die DELETE-Anweisung Geltung hat, ist in der
Datenmatrix, die im DATA-Step erzeugt wird, nicht enthalten.
Beispiel
Im
obigen Beispiel (2) würden die Anweisungen
IF BUNDLAND NE 'TIR' THEN DELETE;
IF BUNDLAND
= 'TIR' THEN OUTPUT;
zum
gleichen Ergebnis führen.
Dazu
benötigen wir
·
die
INFILE-Anweisung
·
die
INPUT-Anweisung
Bespiel
Dateidefinition für Lesen von der Platte:
DATA EINS;
INFILE 'MEINDAT';
INPUT variablenliste und -beschreibung;
Die
INFILE-Anweisung sagt SAS, dass die mit der INPUT-Anweisung zu lesenden Daten
in der Datei MEINDAT zu finden sind. Die INPUT-Anweisung sagt SAS, die die Daten in der zu lesenden
Dateistrukturiert sind.
Beispiel
Dateidefinition für Lesen vom Magnetband:
DATA VIER;
INFILE FREMDTAP BLKSIZE=800 LRECL=80 ;
INPUT .....;
Beachte!
Die Angaben zur Satzlänge (LRECL) und Blockgrösse (BLKSIZE) müssen mit den
Groessen des einzulesenden Bandes übereinstimmen.
Zur
INFILE-Anweisung gibt es zahlreiche Optionen (siehe das Handbuch SAS BASICS)
Die
Standardfiles werden im Kapitel REPORTERSTELLUNG beschrieben. Folgende
wesentliche gibt es:
LOG
PRINT
Die
FILE-Anweisung stellt die Verbindung zwischen dem symbolischen Namen der Datei
in SAS und der physischen Datei her. Daher ist diese Anweisung abhängig von
jeweiligen Betriebssystem abhängig.
Sie hat
unter WINDOWS und UNIX die SYNTAX:
FILE NAME `EFN`.
Für den
externen Filenamen (EFN) folgende Filedefinitionen zugelassen:
die Kurzbezeichnung – in diesem Fall wird die Datei im aktuellen
Directory angelegt
der qualifizierte Dateiname – in diesem Fall wird die Datei in dem
angegebenen Directory (dieses muss bereits vorhanden sein) angelegt.
Beachte! Die EFN müssen den Konventionen des
Betriebssystems entsprechen und nicht jenen von SAS. Sie sind immer unter
Hochkomma zu setzen.
Der FILE-Anweisung muss eine Filedef-Anweisung (FI)
vorausgehen. Dies kann entweder durch eine CMS-Anweisung oder eine X-Anweisung
erfolgen:
CMS
FILEDEF AUSGABE DISK AUSG TEXT A;
FILE
AUSGABE;
Eine
SAS-Datei ist das Ergebnis eines DATA-Steps. Sie kann laufzeiteffizienter
bearbeitet werden als eine Betriebssystem-Datei.
Beispiel:
Durch die Anweisung
DATA TEST;
....
wird
eine temporäre SAS-Datei mit dem Namen TEST angelegt. Sie steht bis zur
Beendigung des SAS-Programms für weitere Bearbeitungen zur Verfügung. Man nennt
sie eine temporäre SAS-Datei.
Die
LIBNAME-Anweisung stellt die Verbindung zwischen einem Directory und einem
SAS-Directory her. Unter UNIX und Windows ist sie für permanente Dateien
unbedingt erforderlich. Unter anderen Betriebssystemen kann sie entfallen (z.
B.: CMS).
Beispiel:
Durch die Anweisung
DATA UMSATZ.FOOD;
LIBNAME UMSATZ 'STATISTIK';
wird
eine permanente SAS-Datei im Verzeichnis STATISTIK mit dem Namen FOOD erzeugt.
Sie steht sowohl während des Laufes des SAS-Programms für weitere Bearbeitungen
zur Verfügung; sie wird aber andererseits auch als Betriebssystem-Datei im
Verzeichnis STATISTIK mit dem Namen FOOD in einem speziellen SAS-Format
gespeichert und kann bei einem zukünftigen Lauf eines SAS-Programms als
SAS-Datei UMSATZ.FOOD angesprochen werden, ohne dass die SAS-Datei neuerlich
erzeugt werden muss.
Beachte!
·
Die
LIBNAME-Anweisung muss unter WINDOWS und UNIX auf ein bereits bestehendes
Verzeichnis zeigen.
·
Die
Filereferenz muss mit dem ersten Namen des DATA-Steps übereinstimmen.
SAS-Dateien
koennen in einem SAS-Procedure analysiert oder in einem weiteren DATA-Step
bearbeitet werden. Für letzteren Zweck dienen die:
·
SET-Anweisung
·
MERGE-Anweisung
Wir
beginnen mit der SET-Anweisung. Sie wird zum Einlesen einer SAS-Datei, zum
(sequentiellen) Kombinieren von SAS-Dateien und zum sortierten Kombinieren von
SAS-Dateien verwendet.
Beispiel:
SET-Anweisung zum Einlesen einer SAS-Datei
DATA ALLE;
INPUT NAME $ 1-10 GEHALT 11-20;
CARDS;
...
;
DATA ARM;
SET ALLE;
IF GEHALT < 10000;
...
;
In die SAS-Datei ARM werden alle Sätze der SAS-Datei ALLE eingelesen
(SET ALLE;), aber nur jenen behalten (IF ...), für welche die Bedingung erfüllt
ist.
Beispiel:
SET-Anweisung zum Kombinieren von SAS-Dateien
DATA WERK1;
INPUT NAME $
1-10 GEHALT 11-20 SEX $ 22;
CARDS;
TRABER
M. 43000.00 M
MEIER
A. 28000.00 W
....
;
DATA WERK2;
INPUT NAME $ 1-10 GEHALT 11-20
BONUS 21-26;
CARDS;
KUNISCH
T.24400.00 2000
WOLTER
F. 19000.00 16000
...
;
DATA
BETRIEB;
SET ABTEIL1 ABTEIL2;
In die
SAS-Datei BETRIEB werden zuerst die Sätze aus ABTEIL1, dann jene aus ABTEIL2
gestellt. Die SAS-Datei BETRIEB enthält folgende Sätze:
TRABER
M. 43000.00 M .
MEIER
A. 28000.00 W .
...
KUNISCH
T. 24400.00 . 2000
WOLTER
F. 19000.00 . 16000
...
Beachte!
Die "missing values" in der SAS-Datei BETRIEB.
Beispiel:
SET-Anweisung zum sortierten Kombinieren von SAS-Dateien (SET-Anweisung mit
BY-Option)
DATA WERK1;
INPUT NAME $
1-10 GEHALT 11-20 SEX $ 22;
CARDS;
TRABER
M. 43000.00 M
MEIER
A. 28000.00 W
....
;
DATA WERK2;
INPUT NAME $ 1-10 GEHALT 11-20
BONUS 21-26;
CARDS;
KUNISCH
T.24400.00 2000
WOLTER F. 19000.00
16000
...
;
PROC SORT;
BY NAME;
DATA
BETRIEB;
SET ABTEIL1 ABTEIL2; BY NAME;
In die
SAS-Datei BETRIEB werden in nach der Variablen NAME sortiertert. Folge die
Sätze aus ABTEIL1 und ABTEIL2 gestellt. Voraussetzung ist, dass beide (alle) zu
kombinierenden Dateien das in der BY-Option angeführten Kriterium (NAME)
enthalten und nach ihm sortiert sein müssen.
Die
SAS-Datei BETRIEB enthält folgende Sätze:
KUNISCH
T. 24400.00 . 2000
...
MEIER
A. 28000.00 W .
...
TRABER
M. 43000.00 M .
...
WOLTER
F. 19000.00 . 16000
...
Die
MERGE-Anweisung dient dazu, Beobachtungen aus mehreren SAS-Dateien zu einer
Beobachtung zusammenzufassen.
Beispiel:
MERGE-Anweisung zum sortierten Kombinieren von SAS-Dateien (MERGE-Anweisung mit
BY-Option)
DATA NAMEN;
INPUT KDN_NR
NAME $;
CARDS;
126448 TAVIANI
223456 KUNISCH
184417 MUELLER
355643 BOSCOVIC
...
;
PROC SORT;
BY KDN_NR;
DATA WOHNORT;
INPUT KDN_NR
ORT $ PLZ;
CARDS;
355643
WIEN 1220223456 GRAZ 8020
126448
LINZ 4010
...
;
PROC SORT;
BY KDN_NR;
DATA
KUNDEN;
MERGE NAMEN WOHNORT;
BY KDN_NR;
Jeder
Satz in die SAS-Datei KUNDEN enthält die Variablen KDN_NR, NAME, ORT, und PLZ.
Die Sätze stehen in nach der Variablen KDN_NR sortierter Folge. Voraussetzung
ist wiederum, dass beide (alle) zu kombinierenden Dateien das in der BY-Option
angeführten Kriterium (KDN_NR) enthalten und nach ihm sortiert sein müssen. Die
SAS-Datei KUNDEN enthält folgende Sätze:
126448 TAVIANI LINZ
4010
184417 MUELLER
. .
223456
KUNISCH GRAZ 8020
355643
BOSCOVIC WIEN 1220
Beachten
Sie die "missing values" in der SAS-Datei NAMEN.
Noch
ein Beispiel zum sortierten Kombinieren mit MERGE-Anweisung:
DATA SEX;
INPUT VORNAME
$ GESCHL $;
CARDS;
HERBERT
M
MARIA M
ANNA W
;
DATA PERSONEN;
INPUT VORNAME $ ZUNAME $;
CARDS;
HERBERT
MOSER
BERTA
HUBER
ANNA
MEIER
MARIA
SANDNER
HERBERT
MUELLER
MARIA WOLF
;
PROC SORT DATA=SEX;
BY VORNAME;
PROC
SORT DATA=PERSONEN;
BY VORNAME;
DATA
MERGE;
MERGE PERSONEN SEX;
BY VORNAME;
Die
SAS-Datei MERGE enthält folgende Sätze:
ANNA
MEIER W
BERTA
HUBER
HERBERT
MOSER M
HERBERT
MUELLER M
MARIA
WOLF M
MARIA
SANDNER M
Grob
gesprochen, vermehrt die SET-Anweisung die Zahl der Beobachtungen, während die
MERGE-Anweisung die Zahl der Variablen vermehrt. Am deutlichsten wird das beim
Verwenden von SET- und MERGE-Anweisung ohne BY-Option. Den Fall einer
MERGE-Anweisung ohne BY-Option, der in Anwendungen kaum vorkommt, zeigt das
nächste Beispiel.
Beispiel:
MERGE-Anweisung zum nicht-sortierten Kombinieren von SAS-Dateien
(MERGE-Anweisung ohne BY-Option)
DATA EINS;
INPUT MATR_NR
NAME $;
CARDS;
123456
MEIER
123457
MUELLER
123458
TESTER
...
;
DATA
ZWEI;
INPUT VORNAME $ ORT $;
CARDS;
HERBERT
WIEN
FRANZ
GRAZ
HUBERT
LINZ;
...
;
DATA
DREI;
MERGE EINS ZWEI;
Die
SAS-Datei DREI enthält folgende Sätze:
123456
MEIER HERBERT WIEN
123457
MUELLER FRANZ GRAZ
123458
TESTER HUBERT LINZ
Achtung!
Sie sind selbst dafür verantwortlich, dass die zusammengehörigen Beobachtungen
der "gemergten" Dateien richtig zugeordnet sind. Man wird wohl den
geringen Extra-Aufwand, eine BY-Variable in jeder der SAS-Dateien mitzuführen,
gerne in Kauf nehmen.
Die
Daten sind zwar schon älteren Datums, aber Sie können trotzdem noch ausgewertet
werden. Im Rahmen dieses Tutorials soll die Arbeitsweise mit SAS gezeigt
werden.
Angaben
Die Indizes der Umsätze des Einzelhandels
betrugen in den Berichtsmonaten MAI
1987, JUNI 1987 und JULI 1987 nominell (Quelle: Groß- und Einzelhandel Umsatz-
und Wareneingangsindizes, Österreichisches Statistisches Zentralamt).
MAI JUNI JULI
EH.M.NAHRUNGS-U.GENUSSM.AUSG.TABAK 209.3
214.9 230.0
EH.M.TABAKWAREN 259.6 268.0
283.0
EH.M.TEXTILWAREN 201.7 184.4
208.4
EH.M.SCHUHEN 191.3 175.1
199.7
EH.M.LEDER
UND LERDERERSATZWAREN 138.6 140.0
142.4
EH.M.HEILMITTELN 281.2 284.5
299.4
EH.M.KOSZ.ERZ.,WASCHM.,CHEMIKALIEN 190.3
200.9 221.1
EH.M.MÖBELN
UND HEIMTEXTILIEN 195.0 209.4
246.5
EH.M.METALLW.,HAUSHALTSG.,GLASW. 174.5 177.7 188.5
EH.M.GUMMI-U.KUSTSTOFFWAREN 109.1 116.1 120.4
EH.M.FAHRZEUGEN 331.2 345.1
337.5
EH.M.NÄH-,STRICK-,U.BÜROMASCH. 200.9 215.4 211.7
EH.M.OPTISCHEN
U.FEINMECH.ERZ. 321.1 372.4
397.5
EH.M.ELEKTROTECH.ERZEUGNISSEN 143.9 161.1 172.9
EH.M.PAPIER-U.SCHREIBW.,BUEROBED 147.2 150.1 154.0
EH.M.BUECHERN,ZEITG.,MUSIKALIEN 202.2 202.1 224.3
EH.M.UHREN
U.SCHMUCKWAREN 192.2 172.2
215.4
EH.M.SPIELW.,SPORTART.U.MUSIKINSTR. 155.7
189.1 232.6
EH.M.BRENNSTOFFEN 165.5 195.0
201.9
EH.M.TREIBSTOFFEN 172.8 179.0
199.8
EH.M.BLUMEN
U.PFLANZEN 507.2 311.9
266.2
WAREN-U.VERSANDHÄUSER 178.9 159.2
155.0
EH.M.GEMISCHTWAREN 238.4 246.0
290.9
EH.M.ÜBRIGEN
WAREN 131.6 139.0
144.0
Die
Daten finden sich in der Datei ehums.daten.
Aufgabenstellung
Berechnen
Sie die Veränderungen der Indexzahlen zum Vormonat in Absolutwerten und in
Prozenten.
Drucken
Sie die Ergebnisse aus.
Legen
Sie eine permanente SAS-Datei an, welche die vollständige Branchenbezeichnung,
die Indexwerte, und die Veränderungen zum Vormonat enthält.
Angaben
Die
Indizes der Umsätze des Einzelhandels betrugen im Berichtsmonat AUGUST 87
nominell (Quelle: Groß- und Einzelhandel Umsatz- und Wareneingangsindizes
(Österreichisches Statistisches Zentralamt).
AUGUST
EH.M.NAHRUNGS-U.GENUSSM.AUSG.TABAK 211.4
EH.M.TABAKWAREN 249.7
EH.M.TEXTILWAREN 168.5
EH.M.SCHUHEN 162.7
EH.M.LEDER
UND LERDERERSATZWAREN 152.6
EH.M.HEILMITTELN 272.5
EH.M.KOSZ.ERZ.,WASCHM.,CHEMIKALIEN 187.7
EH.M.MÖBELN
UND HEIMTEXTILIEN 211.7
EH.M.METALLW.,HAUSHALTSG.,GLASW. 159.9
EH.M.GUMMI-U.KUSTSTOFFWAREN 107.4
EH.M.FAHRZEUGEN 264.7
EH.M.NÄH-,STRICK-,U.BÜROMASCH. 178.6
EH.M.OPTISCHEN
U.FEINMECH.ERZ. 355.0
EH.M.ELEKTROTECH.ERZEUGNISSEN 151.0
EH.M.PAPIER-U.SCHREIBW.,BUEROBED 164.0
EH.M.BÜCHERN,ZEITG.,MUSIKALIEN 221.2
EH.M.UHREN
U.SCHMUCKWAREN 234.5
EH.M.SPIELW.,SPORTART.U.MUSIKINSTR. 191.8
EH.M.BRENNSTOFFEN 228.7
EH.M.TREIBSTOFFEN 197.1
EH.M.BLUMEN
U.PFLANZEN 236.8
WAREN-U.VERSANDHÄUSER 180.8
EH.M.GEMISCHTWAREN 268.8
EH.M.ÜBRIGEN
WAREN 139.0
Die
Daten finden sich in der Datei ehums1.daten.
Aufgabenstellung
Führen
Sie die Daten mit jenen der Aufgabe 1 zusammen.
Berechnen
Sie die Veränderungen der Indexzahlen zum Vormonat in Absolutwerten und in
Prozenten.
Drucken
Sie die Ergebnisse aus.
Angabe
Auf der
virtuellen Maschine Betkurs finden Sie die Datei fort.test. Diese Datei
enthält Angaben über Veranstaltungen an der WU.
Aufgabenstellung
Geben Sie
eine Liste aller jener Veranstaltungen aus, die Vorlesung („VO“) oder
Übung („UE“) sind.
Angaben
Von den
an der Wiener Börse notierten Aktien sind folgende Daten bekannt:
Name Kurs letzte Dividende Hoechstkurs Tiefstkurs
am 28.11.87
CA-BV
STAMM 1980 60 2480
1960
CA-BV VORZ.
1900 60 2285
1830
CA
KAP-ANT. 1920 30 2160
1740
ÖLB
STAMM 384 12 450 344
ÖLB
VZ 375 12 418
319
ÖLB
PS 350 3 393
315
BANK F.
KÄRNTEN 453 12 472
449
BANK F. OÖ.
452 12 475 450
BANK F. TIROL
451 12 473 448
ERSTE
ALL. ST. 5390 50 7990
5200
ERSTE
ALL. VZ. 5160 50 7280 5100
INTERUNFALL 11070 100
13200 10800
WIENER
ALLIANZ 12330 60 16500
12300
AKG 3320 150 4330
2970
PORR
STAMM 308 11 355
288
PORR VZ
277 11 350 270
AUSTIA EMAIL
2190 120 2400 1660
CONSTANTIA 930 22
1200 890
GÖSSER 2780 75 3450 2460
HEID 1215 0 1835
1080
HOLTEX 300 0
320 245
HUTTER 259 9
355 224
IFE 1445 45 1700
1420
IMP.
HOTELS 683 0 750
640
JENBACHER 1820 0
1950 1790
JUNGBUNZLAUER 6810 500 11470 6550
KABEL
U. DRAHT 1850 50 2350
1620
LEIPNIK 219 9
270 200
LENZING 577 15
835 487
LEYKAM 296 12 410 213
LINZ
TEXTIL 4750 140 6080
2750
MAGINDAG 1205 0
1620 1103
MANNER 495 15
530 435
MAUTNER
VZ 2145 80 3100
2050
MEINL 1030 9 1400
1000
MIBA VZ
600 5 785 520
MONTANA
11150 700 18250 10850
NEUSIEDLER 4320 120
5750 4320
ÖMV
HANDEL ST 4320 75 5200
2550
ÖMV
HANDEL VZ 1750 75 2330
1240
Ö. AUTO
204 5 258 161
Ö. BRAU
2450 75 3300 2270
Ö. BROWN BOVERI
195 5 275 181
OTTAKRINGER VZ.
790 3.5 860 760
PAPIER
LAAKIRCHEN 2170 120 3100
2080
PERLMOSER 630 20.5
780 555
RADEX 265 10 322
255
REININGHAUS 800 18
990 770
SCHLUMBERGER 3990 100
4534 3519
SCHWECHATER 1130 40
1690 1030
SEMPERIT 168 0
230 152
STADLAUER 303 12 370 215
STEYR
DAIMLER 114 0 167
106
STEYRMÜHL 3000 80
3250 3000
STÖLZLE
250 0 250 250
STRABAG
3760 150 4600 3500
TEERAG
1350 25 1350 720
TREIBACHER 270 6
372 250
UNION
BAUM. 1610 22 1645
1200
UNIVERSALE 258 0
290 165
VEITSCHER 640 24
1150 605
WAAGNER
BIRO 189 0 243
173
WERTHEIM 358 0
412 268
WIENER
HOTEL 3100 0 3100
3100
WIENER
LOKALB. 360 0 360
360
WIENERBERGER 1005 17
1293 895
Die
Daten sind in der Datei aktien.daten gespeichert.
Aufgabenstellung
Berechnen
Sie:
·
Dividendenrendite
für aktuellen, Tiefst- und Hoechstkurs.
·
Spannweite
des Kurses, absolut und in Prozent vom Tiefst- und vom aktuellen Kurs.
Erstellen
Sie eine Liste, die nur jene Gesellschaften enthält, die eine Dividende
ausgeschüttet haben.
Ihr
Freund will Aktien erwerben. Er möchte sein Risiko streuen und deshalb von
jeder Aktie maximal 1 Stück kaufen. Zur Maximierung seines Gewinnes wählt er
nach der Dividendenrendite die zu kaufenden Papiere.
Erstellen
Sie eine Liste der Aktien, die nach der Dividendenrendite sortiert ist.
Außerdem soll die Liste das aufgewendete Kapital und die
Durchschnittsverzinsung enthalten für den Fall, dass Ihr Freund alle Aktien von
Top der Liste bis zur jeweiligen Zeile kauft.
Nehmen
Sie eine Wirtschaftszeitung zur Hand und geben Sie die heutigen Börsekurse in
eine Datei ein. Führen Sie diese mit den historischen Daten zusammen.
Erstellen
Sie eine Liste, aller jener Gesellschaften, die heute keine Aktien mehr begeben
haben. Erstellen Sie eine Liste aller jener Gesellschaften, die heute noch
gehandelt werden.
Mit
SAS-Prozeduren können Sie SAS-Dateien analysieren, die Sie zuvor in einem
DATA-Step erstellt haben. In einem SAS-Programm können Sie mehrere
SAS-Prozeduren aufrufen. Jeden Aufruf einer SAS-Prozedur nennen wir einen
PROC-Step.
Ein
PROC-Step beginnt mit der PROC-Anweisung. Sie spezifiziert, welche Prozedur
ausgeführt werden soll. Die weiteren Anweisungen des PROC-Step enthalten
Angaben, mit der Details der SAS-Prozedur (die zu bearbeitende SAS-Datei, der
Output, Optionen etc.) festgelegt werden.
Achtung!
Wie im DATA-Step muss auch jede SAS-Anweisung eines PROC-Steps mit einem
Semikolon abgeschlossen werden.
Konvention
des PROC-Steps: Im PROC-Step werden, wenn nicht anders angegeben, alle
Variablen und alle Beobachtungen der zuletzt erstellten Datei analysiert. Soll
im PROC-Step nicht die zuletzt, sondern eine früher erstellte Datei bearbeiten
soll, so ist die zu analysierende Datei mit einer DATA-Option festzulegen.
Die
Details der statistischen Analyse einer SAS-Prozeduren werden
·
mittels
Optionen
·
durch
Anweisungen
festgelegt.
Typische
Optionen einer SAS-Prozedur sind:
·
die
Datei-Option
·
die
OUT-Option
Ein
Beispiel