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.1    Allgemeines

1.2    BETRIEBSARTEN UND SAS-HELP

1.2.1    Betriebsarten:

1.2.2    SAS-HELP

2    SAS für den eiligen Benutzer

2.1    Lektion 1: EIN BEISPIEL

2.2    Lektion 2: Ein Programm

2.2.1    Allgemeines

2.2.2    DATEN

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.3    Lektion 3: DER OUTPUT

2.4    Lektion 4: Der Datensatz HANDEL

2.5    Lektion 5:  FÜR SIE ZUM ÜBEN

2.5.1    1. AUFGABE

3    Mehr über den DATA-Step

3.1    DAS EINLESEN, SPEICHERN UND WIEDERAUFFINDEN VON DATEN

3.2    DAS AUFBEREITEN UND BEARBEITEN VON DATEN

3.3    DAS ERSTELLEN VON REPORTEN

3.4    DATEN

3.5    EINLESEN VON DATEN

3.6    INPUT-ANWEISUNG

3.7    FORMATDEFINITION

3.7.1    NUMERISCHE FORMATDEFINITIONEN:

3.7.2    ALPHANUMERISCHE FORMATDEFINITIONEN (BEGINNEN MIT "$"):

3.7.3    DATUMSFORMATE:

3.7.4    KONTROLLE DER SPALTEN UND ZEILEN

3.8    DIE CARDS-ANWEISUNG

3.9    MISSING VALUES

3.10    FUNKTIONEN

3.11    DAS AUFBEREITEN DER DATEN

3.12    SAS-AUSDRÜCKE

3.12.1    ARITHMETISCHE OPERATIONEN

3.12.2    LOGISCHE OPERATIONEN

3.12.3    STRING-OPERATION

3.13    BEREICHE

3.14    STEUERANWEISUNGEN

3.14.1    IF-ANWEISUNG

3.14.1.1    IF-THEN Anweisung

3.14.1.2    IF-THEN/ELSE Anweisung

3.14.1.3    Das 'subsetting IF'

3.14.2    SELECT-ANWEISUNG

3.15    DO Anweisung

3.15.1    DO-GRUPPE

3.15.2    DO WHILE-Schleife

3.15.3    DO UNTIL-Schleife

3.15.4    ITERATIVE DO-ANWEISUNG, ZÄHLSCHLEIFE

3.16    AUSWAHL VON VARIABLEN UND BEOBACHTUNGEN

3.16.1    DROP-Anweisung

3.16.2    KEEP-Anweisung

3.17    OUTPUT-Anweisung

3.18    DELETE-Anweisung

3.19    DAS EINLESEN VON DATEN aus einer Betriebssystemdatei

3.19.1    Lesen von der Disk

3.19.2    Lesen von einem Band

3.20    Ausgabe von Daten in eine Betriebssystemdatei

3.20.1    FILE-Anweisung

3.20.2    PUT-Anweisung

3.21    ARBEITEN MIT SAS-DATEIEN

3.22    SET-Anweisung

3.23    MERGE-Anweisug

3.24    Für Sie zum Üben

3.24.1    2. Aufgabe

3.24.2    3. Aufgabe

3.24.3    4. Aufgabe

3.24.4    5. Aufgabe

4    SAS-PROZEDUREN

4.1    AUFBAU der SAS-PROZEDUREN

4.1.1    Allgemeines

4.1.2    Optionen

4.1.3    Anweisungen

4.2    AUSGEWÄHLTE PROZEDUREN

4.2.1    AUSGABE DER DATEN AM DRUCKER ODER AM BILDSCHIRM

4.2.2    GRAPHISCHE DARSTELLUNG DER DATEN

4.2.2.1    PROC CHART

4.2.2.2    PROC PLOT

4.2.3    AUSZÄHLEN UND ANALYSIEREN VON HÄUFIGKEITEN

4.3    ÜBERSICHT ÜBER DIE SAS-PROZEDUREN

4.3.1    Erstellen von Graphiken

4.3.2    Deskriptive Statistik

4.3.3    Analyse von Häufigkeiten

4.3.4    Reporterstellung

4.3.5    Regressionsanalyse

4.3.6    Zeitreihenanalyse

4.3.7    Analyse linearer Modelle

4.3.8    Nichtparametrische Analyse

4.3.9    Diskriminanzanalyse

4.3.10    Clusteranalyse

4.3.11    Sonstige multivariate Verfahren

4.3.12    Überlebens-Analyse

4.3.13    Prozesskontrolle

4.3.14    Operations Research

4.3.15    Finanzplanung

4.3.16    Design von Experimenten

4.3.17    Utilities

4.4    FÜR SIE ZUM ÜBEN

4.4.1    6. Aufgabe

4.4.2    7. Aufgabe

4.4.3    8. Aufgabe

4.4.4    9. Aufgabe

5    REPORTERSTELLUNG

5.1    ALLGEMEINES

5.2    LABEL-ANWEISUNG

5.3    PROC FORMAT

5.3.1    Labels für einen Wertebereich

5.3.2    Darstellungsmasken

5.4    AUSGABE AUF EXTERNE DATEIEN

5.4.1    Allgemeines

5.4.2    FILE-Anweisung

5.4.3    PUT-Anweisung

5.5    FÜR SIE ZUM ÜBEN

5.5.1    10. Aufgabe

6    Tips und Tricks der Autoren

6.1    Die RUN-Anweisung

6.2    Arbeiten mit Landkarten

 

 

 

 

 

 

1     Einleitung  S A S - T U T O R I A L

1.1    Allgemeines

 

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.

 

1.2    BETRIEBSARTEN UND SAS-HELP

 

1.2.1                      Betriebsarten:

 

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.

 

 

1.2.2                      SAS-HELP

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.

 

 

2     SAS für den eiligen Benutzer                     

    

                                                                               

2.1    Lektion 1: EIN BEISPIEL                             

                                                                               

                                                                              

                                                                               

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.                                                

 

2.2    Lektion 2: Ein Programm

 

2.2.1                      Allgemeines

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.

 

 

2.2.2                      DATEN

 

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.

 

 

2.2.3                      EINLESEN DER DATEN VON EINER BETRIEBSSYSTEM-DATEI:

 

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.

 

 

2.2.4                      SPALTENORIENTIERTES EINLESEN 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.

 

 

2.2.5                      VERKNÜPFEN UND TRANSFORMIEREN DER DATEN:

 

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.

 

2.3    Lektion 3: DER OUTPUT

 

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.

 

2.4    Lektion 4: Der Datensatz HANDEL

 

 

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.

 

2.5    Lektion 5:  FÜR SIE ZUM ÜBEN

 

 

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.

 

2.5.1                      1. AUFGABE

 

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.

 

 

3     Mehr über den DATA-Step

 

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:

 

3.1    DAS EINLESEN, SPEICHERN UND WIEDERAUFFINDEN VON DATEN

 

SAS kann Daten von verschiedenen Quellen bzw. Medien  (Magnetplatte,-band) lesen. Die Daten werden dabei in einer temporären oder permanenten SAS-Dateien gespeichert.

 

 

3.2    DAS AUFBEREITEN UND BEARBEITEN VON DATEN

 

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.

 

 

3.3    DAS ERSTELLEN VON REPORTEN

 

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.

 

 

3.4    DATEN

 

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).

 

 

3.5    EINLESEN VON DATEN

 

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.

 

 

3.6    INPUT-ANWEISUNG

 

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.

 

 

3.7    FORMATDEFINITION

 

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:

 

3.7.1                      NUMERISCHE FORMATDEFINITIONEN:

 

  4.        (vierstellige ganze Zahl)

  6.3       (sechsstellige Deziamlzahl mit drei Nachkomma-Stellen)

  E12.3     (Exponentialdarstellung mit drei Nachkomma-Stellen)

 

3.7.2                      ALPHANUMERISCHE FORMATDEFINITIONEN (BEGINNEN MIT "$"):

 

  $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)

 

3.7.3                      DATUMSFORMATE:

  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!

 

 

3.7.4                      KONTROLLE DER SPALTEN UND ZEILEN

 

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.

 

 

3.8    DIE CARDS-ANWEISUNG

 

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.

 

3.9    MISSING VALUES

 

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.

 

 

3.10                    FUNKTIONEN

 

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"!

 

3.11                    DAS AUFBEREITEN DER DATEN

 

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.

 

3.12                    SAS-AUSDRÜCKE

 

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

 

 

3.12.1                ARITHMETISCHE OPERATIONEN

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

 

 

3.12.2                LOGISCHE OPERATIONEN

 

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).

 

 

3.12.3                STRING-OPERATION

 

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).

 

3.13                    BEREICHE

 

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.

 

3.14                    STEUERANWEISUNGEN

 

 

3.14.1                IF-ANWEISUNG

 

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.

 

 

3.14.1.1             IF-THEN Anweisung

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.

 

 

3.14.1.2             IF-THEN/ELSE Anweisung

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.

 

 

3.14.1.3             Das 'subsetting IF'

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.

 

 

3.14.2                SELECT-ANWEISUNG

 

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.

 

3.15                     DO Anweisung

3.15.1                DO-GRUPPE

 

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.

 

 

3.15.2                DO WHILE-Schleife

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.

 

 

3.15.3                DO UNTIL-Schleife

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.

 

 

3.15.4                 ITERATIVE DO-ANWEISUNG, ZÄHLSCHLEIFE

 

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|

 

3.16                    AUSWAHL VON VARIABLEN UND BEOBACHTUNGEN

 

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.

 

 

3.16.1                 DROP-Anweisung

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.

 

 

3.16.2                KEEP-Anweisung

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.

 

 

3.17                    OUTPUT-Anweisung

 

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.

 

 

3.18                     DELETE-Anweisung

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.

 

3.19                    DAS EINLESEN VON DATEN aus einer Betriebssystemdatei

 

Dazu benötigen wir

·         die INFILE-Anweisung

·         die INPUT-Anweisung

 

3.19.1                Lesen von der Disk

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.

 

3.19.2                Lesen von einem Band

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)

 

3.20                    Ausgabe von Daten in eine Betriebssystemdatei

3.20.1                FILE-Anweisung

3.20.1.1             Standard-Files

Die Standardfiles werden im Kapitel REPORTERSTELLUNG beschrieben. Folgende wesentliche gibt es:

   LOG

   PRINT

3.20.1.2             Vom Benutzer definierte Files

3.20.1.2.1             WINDOWS und UNIX

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.

3.20.1.2.2             CMS

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;

 

3.20.2                PUT-Anweisung

Siehe Kapitel Reporterstellung

3.21                    ARBEITEN MIT SAS-DATEIEN

3.21.1                Allgemeines

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.

 

3.21.2                LIBNAME-Anweisung

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

 

3.22                    SET-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

...

 

 

3.23                    MERGE-Anweisug

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.

 

 

3.24                    Für Sie zum Üben

3.24.1                Allgemeines

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.

3.24.2                2. Aufgabe

 

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.

 

 

3.24.3                3. Aufgabe

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.

 

 

3.24.4                4. Aufgabe

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.

 

 

3.24.5                5. Aufgabe

 

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.

 

3.24.6                6. Aufgabe

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.

 

4     SAS-PROZEDUREN

4.1    AUFBAU der SAS-PROZEDUREN

4.1.1                      Allgemeines

 

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.

 

4.1.2                       Optionen

Typische Optionen einer SAS-Prozedur sind:

 

·         die Datei-Option

·         die OUT-Option

 

Ein Beispiel

 

 

   PROC PRINT DATA=ERST;

 

4.1.3                       Anweisungen

Typische Anweisungen einer SAS-Prozedur sind:

 

·         die VAR-Anweisung (die Prozedur bearbeit nur bestimmte Variable)

Beispiel

   PROC MEANS;

     VAR UMS1 UMS2;

Ergebnis

Die PROC MEANS wird nur auf die Variablen UMS1 und UMS2 angewendet.

 

·         BY-Anweisung (die Prozedur wird auf Teilmengen der Beobachtungen getrennt angewendet, die durch die Werte der BY-Variablen festgelegt sind)

Beispiel

   PROC SORT DATA=ERST;

     BY DISKONT;

 

   PROC MEANS;

     VAR UMS1 UMS2;

     BY DISKONT;

Ergebnis

Die Datei muss vor dem PROC-Step nach steigenden Werten der in der BY-Anweisung angeführten Variablen sortiert werden. Dies leistet die Prozedur SORT, welche die gleiche BY-Anweisung enthalten muss wie die fragliche SAS-Prozedur.

 

Literatur: SAS USER'S GUIDE:BASICS, PROC-Step

 

4.2    AUSGEWÄHLTE PROZEDUREN

 

Im folgenden werden einige häufig angewendeten Prozeduren beschrieben und damit ein Überblick über die Verwendung von SAS-Prozeduren gegeben. Anschließend wird eine Übersicht über die verfügbaren SAS-Prozeduren gegeben. Wir legen Wert auf die Feststellung, dass die Anwendung einer SAS-Prozedur entsprechendes Statistik-Wissen voraussetzt, und dass dieses in diesem Tutorium nicht vermittelt wird.

 

4.2.1                      AUSGABE DER DATEN AM DRUCKER ODER AM BILDSCHIRM

 

PROC PRINT

 

Die Prozedur PRINT dient der beobachtungsweisen Ausgabe der DATENWERTE in die LISTING-Datei. Eine solche Liste wird

 

·         in einem Report

·         zur händischen Kontrolle der Daten

 

verwendet. Zu den verfügbaren Optionen siehe

 

Literatur: SAS USER'S GUIDE: BASICS.

 

4.2.2                      GRAPHISCHE DARSTELLUNG DER DATEN

Allgemeines

SAS bietet die Prozeduren

 

    CHART

    PLOT

 

für die graphische Darstellung Ihrer Daten an. Die graphische Auflösung entspricht der eines Matrix- oder Schnelldruckers. Hochauflösende graphische Qualität bieten die analogen Prozeduren GCHART und GPLOT. Die Verwendung dieser Prozeduren setzt allerdings die Ausgabe auf einem Graphikschirm, Plotter oder Laserdrucker voraus.

 

4.2.2.1PROC CHART

 

Mit der Prozedur CHART können Balkendiagramme, Blockdiagramme, Kuchen- (Pie-) und Sternengraphiken erstellt werden. Die anzuwendende Methode wird in der Methoden-Anweisung spezifiziert:

 

   VBAR    Vertikales Balkendiagramm

   HBAR    Horizontales Balkendiagramm

   BLOCK   Blockdiagramm mit möglicher 3-dimensionaler Ausgabe

   PIE     Kuchengraphik

   STAR    Sternengraphik

 

Beispiel

 

   PROC CHART;

     VBAR DISKONT;

 

Die GROUP-Option der Methoden-Anweisung ermöglicht es, eine Gliederung der Graphik nach den Merkmalsausprägungen der spezifizierten VARIABLEN vorzunehmen.

 

   PROC CHART;

     VBAR MITARB/GROUP=DISKONT;

 

Die Prozedur CHART bestimmt die Zahl der Klassen, die Klassengrenzen und die Klassenmittelpunkte. Wird die DISCRETE-Option gesetzt, so werden die Häufigkeiten der Merkmalsausprägungen ausgezählt. Die MIDPOINTS-Option gestattet es, die Klassenmitten nach Belieben festzulegen.

 

Die BY-Option ist erlaubt.

 

Literatur: SAS USER'S GUIDE:BASICS, PROC CHART

 

 

4.2.2.2PROC PLOT

 

Mit der Prozedur PLOT kann die Beziehung zwischen zwei Variablen in einem "Scatter"-Diagramm graphisch dargestellt werden.

 

Beispiel

 

   PROC PLOT;

      PLOT UMS1*UMS2;

 

Die PLOT-Anweisung erzeugt das "Scatter"-Diagramm, in dem die Variable UMS1 auf der vertikalen Achse, die Variable UMS1 auf der horizontalen Achse aufgetragen ist.

 

Die Daten werden, soferne nicht anders angegeben, durch Buchstaben gekennzeichnet. A steht für einen Datenwert, B für 2 u.s.w.

 

Die BY-Option ist erlaubt.

 

Literatur: SAS USER'S GUIDE:BASICS, PROC PLOT

 

 

4.2.3                      AUSZÄHLEN UND ANALYSIEREN VON HÄUFIGKEITEN

 

 

PROC FREQ

 

Mit der Prozedur FREQ können Häufigkeiten von Merkmalsausprägungen einer oder mehrerer Variabler ausgezählt und analysiert werden. Die zu analysierenden Variablen werden in der TABLES-Anweisung spezifiziert.

 

Beispiele

 

   PROC FREQ;

    TABLES DISKONT INDUST;

 

Die Prozedur erstellt jeweils eine Häufigkeitstabelle für die Variablen DISKONT und INDUST.

 

Beispiele

 

   PROC FREQ;

    TABLES DISKONT*INDUST;

 

Die Prozedur erstellt eine Kreuztabelle mit den Merkmalsausprägungen der Variablen DISKONT in den Zeilen, denen der Variablen INDUST in den Spalten der Tabelle.

 

Literatur: SAS USER'S GUIDE: BASICS, PROC FREQ

 

 

4.3    ÜBERSICHT ÜBER DIE SAS-PROZEDUREN

4.3.1                      Erstellen von Graphiken

 

Name

*

Erfüllte Aufgabenstellung

PLOT

B

Streu-Diagramme

CHART

B

Histogramme, Block-, Balken-, Kuchen- und Sterngraphiken

GPLOT

G

Streu-Diagramme

GCHART

G

Histogramme, Block-, Balken-, Kuchen- und Sterngraphiken

 

 

Weitere Prozeduren sind TIMEPLOT (B), G3D (G) und GCONTOUR (G).

Pläne können bearbeitet werden mit GMAP (G) und GPROJECT (G).

Nützliche Utilities sind GOPTIONS (G).

Mit GSLIDE können Sie auf den Plotter, Laserdrucker oder Bildschirm Slides oder Folien ausgeben.

 

4.3.2                      Deskriptive Statistik

Name

*

Erfüllte Aufgabenstellung

MEANS

B

Mittelwert, Momente, t-Test

UNIVARIATE

B

Momente, Perzentile, stem-and-leaf und box-plots, Shapiro-Wilk's Test

CORR

B

Korrelationskoeffizienten (Pearson, Spearman und andere)

 

 

Weitere Prozeduren sind SUMMARY (B), TABULATE (B) und TTEST (S).

 

4.3.3                      Analyse von Häufigkeiten

Name

*

Erfüllte Aufgabenstellung

FREQ

BS

Häufigkeitstabellen, Kreuztabellen, entsprechende Teste

 

 

Weitere Prozeduren sind CATMOD (S), LOGISTIC, CORRESP, PRINQUAL und PROBIT (S).

 

4.3.4                      Reporterstellung

Zur Reporterstellung verwendet man  die Anweisungen PUT, FORMAT und LABEL im DATA-Step (siehe auch Kapitel Reporterstellung). Weitere Prozeduren sind FORMAT (B) zur Generierung eigener Formate, PRINT (B) zum Ausdrucken von Listen, sowie CALENDAR (B), FORMS (B), COMPUTAB (B) und GPRINT (G).

 

4.3.5                      Regressionsanalyse

Name

*

Erfüllte Aufgabenstellung

REG

S

Regression

AUTOREG

E

Regression bei autokorrelierten Störgrößen

SYSLIN

E

Analyse von Systemen linearer Regressionsbeziehungen

 

Weitere Prozeduren sind NLIN (S), RSQUARE (S), RSREG (S), STEPWISE(S), GLM (S), SYSNLIN (E), SIMLIN (E), LOGISTIC, ORTHOREG,TRANSREG, LIFEREG  und SIMNLIN (E).

 

4.3.6                      Zeitreihenanalyse

Name

*

Erfüllte Aufgabenstellung

ARIMA

E

Box-Jenkins Methode

FORECAST

E

diverse Prognoseverfahren wie exponentielles Glätten

 

 

Weitere Prozeduren sind AUTOREG (E), SPECTRA (E), X11 (E) und STATESPACE (E).

 

4.3.7                      Analyse linearer Modelle

Name

*

Erfüllte Aufgabenstellung

GLM

S

Varianzanalyse, lineare Regression uni- und multivariat

ANOVA

S

Varianzanalyse

 

 

Weitere Prozeduren sind NESTED (S), NPAR1WAY (S) und VARCOMP (S).

 

4.3.8                      Nichtparametrische Analyse

Name

*

Erfüllte Aufgabenstellung

MPAR1WAY

S

Nichtparametrische Einweg-Varianzanalyse

RANK

S

Rangvergabe

 

Weitere Prozeduren sind SCORE (S) und NEIGHBOR (S).

 

4.3.9                      Diskriminanzanalyse

Name

*

Erfüllte Aufgabenstellung

DISCRIM

S

klassische lineare oder quadratische Diskriminanzanalyse

STEPDISC

S

schrittweise klassische Diskriminanzanalyse

 

Weitere Prozeduren sind CANDISC (S) und NEIGHBOR (S).

 

4.3.10                Clusteranalyse

Name

*

Erfüllte Aufgabenstellung

CLUSTER

S

Hierarchisches Clusterverfahren nach 11 verschiedenen Methoden

TREE

S

zeichnet ein Baum-Diagramm aus den Ergebnissen der Analyse mit CLUSTER oder FASTCLUS.

 

 

Weitere Prozeduren sind ACECLUS (S), FASTCLUS (S) und VARCLUS (S).

 

4.3.11                Sonstige multivariate Verfahren

Name

*

Erfüllte Aufgabenstellung

PRINCOMP

S

Hauptkomponenten- und Faktorenanalyse

FACTOR

S

Hauptkomponenten- und Faktorenanalyse mit Rotationen

 

 

Weitere Prozeduren sind CANCORR (S) und CALIS.

 

4.3.12                Überlebens-Analyse

Name

*

Erfüllte Aufgabenstellung

LIFEREG

S

Analyse parametrischer Modelle der Überlebenszeit

LIFETEST

S

nichtparametrische Schätzung von Überlebensverteilungen und Vergleich der Verteilung für mehrere Populationen

 

 

Weitere Prozeduren sind LOGISTIC und PROBIT (S).

 

4.3.13                Prozesskontrolle

Name

*

Erfüllte Aufgabenstellung

SHEWHART

Q

Shewhart Kontrollkarten für stetige Variable und Attribute

CUSUM

Q

Kontrollkarten auf Basis von kumulativen Summen

MACONTROL

Q

MOSUM- und EWMA-Kontrollkarten

CAPABILITY

Q

berechnet Prozessfähigkeits-Indikatoren

 

 

4.3.14                Operations Research

Name

*

Erfüllte Aufgabenstellung

CPM

O

critical path Methode

NETDRAW

O

zeichnet den Netzplan

GANTT

O

Fortschrittskontrolle

LP

O

lineare, Integer- und gemischte Programmierung

TRANS

O

Transportproblem

 

 

4.3.15                Finanzplanung

Name

*

Erfüllte Aufgabenstellung

LOAN

O

Berechnet Verzinsungen

MORTGAGE

O

Berechnet die Amortisation eines Darlehens

 

4.3.16                Design von Experimenten

Name

*

Erfüllte Aufgabenstellung

PLAN

S

Randomisierte Designs

FACTEX

S

Orthogonale faktorielle Designs

OPTEX

S

optimales Design für faktorielle Experimente

 

 

4.3.17                Utilities

Name

*

Erfüllte Aufgabenstellung

APPEND

B

Anhängen einer SAS-Datei an eine bereits bestehende

CONTENTS

B

Angaben über SAS-Dateien und die enthaltenen Variablen

FORMAT

B

Schaffen neuer Formate (siehe Reporterstellung)

OPTIONS

B

Auskunft über die aktuellen Optionen

SORT

B

Sortiert die Beobachtungen nach vorgegebenen Kriterien

TRANSPOSE

B

Transponiert eine SAS-Datei (aus Zeilen werden Variable und umgekehrt)

 

 

4.3.18                Bildschirmmasken und Dateneingabe

 

FSEDIT

F

Dateneingabe, Erstellen der Masken

FSBROWSE

F

Datenüberprüfung

 

Bevor Sie diese Prozeduren anwenden, schlagen Sie bitte unbedingt im Handbuch nach. Es gibt dabei interaktive Tools, die Sie zur Erstellung von Eingabemasken nützen können.

 

Prozeduren zum Anschauen und Aufbereiten von SAS-Dateien sind BROWSE (B) und EDITOR (B).

 

Die Abkürzungen dienen der Identifikation des Handbuches, in dem die Syntax der Prozedur beschrieben ist. Folgende Kurzbezeichnungen (*) sind vergeben worden.

 

B

SAS BASICS

E

SAS ETS

G

SAS GRAPHICS

O

SAS OR

Q

SAS QC

S

SAS STATISTICS

 

 

4.4    FÜR SIE ZUM ÜBEN

 

 

4.4.1                      7. Aufgabe

Angabe

Der jährliche Umsatz Y in 10 Lebensmittelgeschäften vergleichbarer Lage und ihre Verkaufsflächen X in Quadratmetern betragen:

 

 

     NR   X    Y

       1  55     8.53

       2  52     8.30

       3  66    11.52

       4  58     9.50

       5  52     8.99

       6  45     7.90

       7  68    11.49

       8  50     8.20

       9  49     8.55

      10  60    10.72

 

Aufgabenstellung

Die Schätzwerte des lineraren Regressionsmodells Y = a + bx + U sind zu bestimmen.

 

Die Standardabweichung der Störgrössen und der Schätzer für a und b sind zu schätzen und der Erklärungsgrad ist zu bestimmen.

 

Die Prognosewerte sind zu ermitteln. (Beispiel aus Hackl, Katzenbeisser Statistik )

 

4.4.2                      8. Aufgabe

Angabe

Ein Patientenkollektiv wurde nach 2 Merkmalen klassifiziert

 

     Raucher   Hustenanfälle

               ja        nein

     ja        1169      427

     nein      41        330

 

Aufgabenstellung

Kann für die Population, aus dem dieses Patientenkollektiv eine Stichprobe bildet, behauptet werden, dass das Rauchverhalten und das Auftreten von Hustenanfällen unabhängig voneinander sind? (Beispiel aus Hackl, Katzenbeisser Statistik) Was ändert sich an der Aufgabenstellen, wenn man behauptet, dass Raucher vermehrt Husten?

 

4.4.3                      9. Aufgabe

Angabe

In der Datei AUTO.DAT befinden sich die Daten von Neuwagen.

 

Aufgabenstellung

Überprüfen Sie folgende Fragen, ob statisch signifikant die folgenden Frage überprüft werden können:

   Sind US-Autos teuerer als japanische Autos?

   Benötigen Autos mit einem größeren Hubraum mehr Benzin?

   Besteht ein Zusammenhang zwischen dem Verbrauch auf 100 km und der Zylinderzahl

 

4.4.4                      9. Aufgabe

Angabe

Bei einer Meinungsbefragung zum Thema "COLAS" sind 40 zufällig ausgewählte Leute, die einen Supermarkt mit Colaflaschen verlassen haben, die folgenden Fragen gestellt und folgende Antworten erhoben worden:

 

   Welche Marke bevorzugen Sie (Polar oder Rola)

   Trinken Sie gerne ein süßes Cola (1=süß, 2=ist mir egal, 3=nicht süß)

   Haben Sie schon Polar-Cola getrunken (Ja Nein)

   Wie viele Colaflaschen haben Sie in den letzten 2 Wochen gekauft

 

Die Grunddaten befinden sich in der Datei COLA1.DAT

 

Einen Monat später wurde diese Befragung wiederholt. Die Grunddaten dieser Erhebung sind in der Datei COLA2.DAT gespeichert.

 

Aufgabenstellung

Die Hypothese Rola-Käufer  bevorzugen ein süßeres Cola ist zu überprüfen. Die Berechnung ist für die 1. Untersuchung und für alle vorhandenen Daten durchzuführen.

 

 

5     REPORTERSTELLUNG

5.1    ALLGEMEINES

Zur Schaffung individuell gestaltbarer Berichte stehen Ihnen folgende Routinen zur Verfügung:

 

·         LABEL-Anweisung

·         PROC FORMAT

·         FILE-Anweisung

·         PUT-Anweisung

 

 

5.2    LABEL-ANWEISUNG

Diese Anweisung erlaubt es im DATA-Step für eine Variable eine zusätzliche Bezeichnung zu vereinbaren, die in vielen Prozeduren verwendet wird. Die LABEL-Anweisung kann bei der REPORT-Erstellung zur Bezeichnung der Variablennamen verwendet werden: Während Variablennamen maximal 8 Zeichen lang sein dürfen, können die in der LABEL-Anweisung zugewiesenen Texte bis zu 40 Zeichen umfassen. Werden mehrere LABELS definiert, so kann eine Aufzählung (siehe Beispiel) verwendet werden. In diesem Fall darf kein ; zwischen den einzelnen LABELS gesetzt werden. Es ist aber auch erlaubt, die LABEL-Anweisung mehrfach zu benutzen. In diesem Fall sind die Anweisungen dur ; zu trennen.

 

Beachte! Werden im zugewiesenen Text Hochkommas verwendet, so sind - statt dieses Hochkomma - 2 (einfache) Hochkommas zu setzen.

 

     LABEL     SEM='Anzahl der SEMESTER'

               U2='Umsatz der Artikelgruppe 2';

Oder

     LABEL     SEM='Anzahl der SEMESTER';

     LABEL     U2='Umsatz der Artikelgruppe 2';

 

 

5.3    PROC FORMAT

Die PROC FORMAT dient der Spezifikation eigener, frei definierbarer Formate. Mit ihr können:

 

·         Labels für einen Wertebereich

·         Darstellungsmasken (PICTURES)

 

generiert werden.

 

5.3.1                      Labels für einen Wertebereich

 

     PROC FORMAT;

     VALUE PLZ

          1000-1400='WIEN'

          2000-3999='NIEDERÖSTERREICH'

          4000-4999='OBERÖSTERREICH'

          5000-5999='SALZBURG'

          OTHER='ÜBRIGE BUNDESLÄNDER';

 

     DATA TEST3;

          INPUT PLZAHL;

          PUT PLZAHL PLZ.;

 

 

Beispiele für die Defintion des Wertebereichs, das ist der links vom "=" stehende Teil der Anweisung

 

Bereich

Das Value gilt für

5=

den angegebenen Wert

1-5=

alle Werte im Intervall

0,3-7=

alle angegebenen Werte

1-2=

alle Werte im Intervall

2<-4=

alle Werte im Intervall, Anfangswert jedoch ausgeschlossen

4-<6=

alle Werte im Intervall, Endwert jedoch ausgeschlossen

 

 

Beachte! Der Formatname darf nicht mit einer Ziffer abschließen. Die Formate können Längenattribute (Änderung der Standardlängen) haben; diese werden unmittelbar nach dem Formatnamen, allerdings vor dem . spezifiziert. Der Formatname darf maximal siebenstellig sein (spätere Modifizierungen der Formatlänge sind einzurechnen). Soll ein Format für alphanumerische Variable geschaffen werden, so muss der Name mit $ beginnen.

 

Folgende Optionen stehen zur Verfügung:

 

MIN=n

kleinste Länge des formatierten Ausdruckes

MAX=n

maximale Länge des formatierten Ausdruckes

DEFAULT=n

Standardlänge des formatierten Ausdruckes

FUZZ=n

fällt der Wert nicht auf den definierten Wert, kann bis zu +/- FUZZ das Format trotzdem verwendet werden

 

 

 

     PROC FORMAT;

          VALUE TESTEN (FUZZ=0.5)

               1='ABCD'

               2='EFGH'

               3='IJKL';

 

     DATA FORM;

          INPUT A;

          /* Wir wollen nur die ersten 3 Buchstaben des Formates verwenden

          und Werte wie 1.2 sollen mit 'ABC' und 1.7 oder 2.3 mit 'EFG'

          ausgegeben werden */

          FORMAT A TESTEN3.;

          CARDS;

          1.2

          1.7

          2.3

          ;

 

5.3.2                      Darstellungsmasken

 

Diese erlauben Darstellungsmasken (ähnlich der PIC-Anweisung in PL/I oder in COBOL oder PRINT USING in BASIC) zu erzeugen.

 

Die Ziffern der Darstellungsmaske werden durch die vorhandenen Werte ersetzt, wobei bei der Ziffer 0 die führenden Nullen unterdrückt werden, bei allen anderen Ziffern werden auch die führenden Nullen ausgedruckt. Der erste in einem Picture vorgefundene Punkt '.' wird als Dezimalpunkt angesehen.

 

 

     PROC FORMAT;

          PICTURE TESTX 0-HIGH = '0000+'

               OTHER  = '0000-';

 

     DATA TEST;

          INPUT A;

          PUT A TESTX.;

          CARDS;

     1

     9988

     -1

      ;

 

Ergebnis:

 

   1+

9988+

   1-

 

Folgende Optionen stehen für die einzelnen Werte zur Verfügung:

 

FILL='x'

führende Nullen werden durch das Zeichen ersetzt

PREFIX='x'

das (1-2) Zeichen wird vor die erste Stelle gesetzt

NOEDIT

in dem Picture erfolgt keine Ersetzung

MULT=n

Faktor mit dem die Zahl vor dem Füllen multipliziert werden soll

 

 

 

     PROC FORMAT;

          PICTURE TE

               1-4 ='MIT NOTE 0 BESTANDEN'

               5   ='MIT NOTE 5 NICHT BESTANDEN' (NOEDIT)

               OTHER ='DIE FEHLERHAFTE EINGABE WAR 999';

          PICTURE SCHEC

               LOW-HIGH='00,000,000,000.00 OES' (FILL='*');

          PICTURE DM

               OTHER='00,000,000,000.00' (FILL='*' PREFIX='DM');

          PICTURE MATRIK

               OTHER='J999-9999999';

          VALUE NOTEX (MIN=20)

               1='SEHR GUT'

               2='GUT'

               3='BEFRIEDIGEND'

               4='GENÜGEND'

               5='NICHT GENÜGEND'

               OTHER='FEHLERHAFTE EINGABE';

 

     DATA TEST;

          INPUT M_NUMMER NOTE STIPEND LAND $;

          PUT M-NUMMER MATRIK.   “ NOTE TE40. “ “ NOTE NOTEX. ` ´ §;

          IF LAND = 'D' THEN DO;

               STIPEND = STIPEND / 7.1;

               PUT STIPEND DM.;

          END;

          ELSE PUT STIPEND SCHEC10.;

       CARDS;

     1234567890 1 12345 A

     2345678901 2 71000 D

       ;

Ergebnis

J123-4567890 MIT NOTE 1 BESTANDEN SEHR GUT **,***,*12,345.00 OES

J234-5678901 MIT NOTE 2 BESTANDEN GUT DM**,***,*10,000.00

 

 

 

5.4    AUSGABE AUF EXTERNE DATEIEN

5.4.1                      Allgemeines

 

Wie wir bereits im Kapitel DATA-Step gesehen haben, hat auch die Ausgabe auf Betriebssystem-Dateien ein mehrstufiges Konzept.

 

·         Vereinbarung der Ausgabedatei in einer FILE-Anweisung

·         Tatsächliche Ausgabe der Zeile in der PUT-Anweisung

 

 

5.4.2                      FILE-Anweisung

 

Die FILE-Anweisung erlaubt die Datei für die nachfolgenden PUT-Anweisungen zu definieren. Weiters wird die Seitengestaltung (z.B.: Überschriften, Seitenlänge, Zeilenbreite) festgelegt. Die FILE-Anweisung steht im Zusammenhang mit der PUT-Anweisung und bildet mit dieser ein mächtiges Instrument zur Gestaltung von Reports.

 

Wir unterscheiden zwei Hauptfälle:

 

·         von SAS vordefinierte Dateien:

o        PRINT

o        LOG

o        PUNCH

 

·         vom Benutzer definierte Dateien.

 

Bei vom Benutzer definierten Dateien ist der Zusammenhang zum Betriebssystem mittels Angabe des Dateinamens unter Hochkommas herzustellen. Bei vordefinierten Dateien darf dies nicht erfolgen, da diese Anweisung bei den folgenden PROCs bestehen bleibt und dann zu Schwierigkeiten führen kann.

 

Beachte! Die Dateien LOG und PRINT sind in jedem SAS-System verfügbar. Die Datei PUNCH kann, abhängig von der Implementierung, als NULL-Datei angelegt sein (d. h. die Ausgaben erfolgen nicht real).

 

Vier wesentliche Optionen:

PS=

Definition der Seitenlänge

N=

Definition der Anzahl der Zeilen, die im Speicher gehalten werden. Bei mehrspaltigen Reporten ist N mit mindestens der Seitenlänge zu definieren.

MOD

Die Zeilen werden an eine bestehende Datei angehängt

OLD

Eine bereits bestehende Datei wird überschrieben (ist der Standardwert)

 

Die weiteren Optionen, die besonders unter den einzelnen Betriebssystemen

erforderlich sind, finden Sie in BASICs.

 

Beachte! Wie bereits bei der INFILE-Anweisung besprochen, wird die FILE-Anweisung in der Regel am Anfang des DATA-Steps gesetzt. Sollen jedoch in einem DATA-Step mehrere externe Dateien oder eine externe Datei und eine vordefinierte Einheit beschrieben werden, so muss die entsprechende FILE-Anweisung im Programmfluss vor der PUT-Anweisung stehen.

 

5.4.3                      PUT-Anweisung

 

Die Put-Anweisung dient zum Schreiben. Je nach FILE-Anweisung wird entweder in das Log oder in den Printer oder in den Kartenstanzer (PUNCH) oder auf eine vom Benutzer definierte Datei (externe Datei) geschrieben.

 

Die PUT-Anweisung hat eine ähnliche Syntax wie die INPUT-Anweisung; beide Anweisungen haben eine ähnliche Funktion, nämlich die Ein- oder Ausgabe von Betriebssystemdateien.

 

Auch hier unterscheiden wir die 4 Arten:

 

·         Freie oder listenorientierte Ausgabe

·         Spaltenweise Ausgabe

·         Formatierte Ausgabe

·         'named' Ausgabe

 

Bitte vergleichen Sie die INPUT-Anweisung. Zusätzlich kommen folgende Anweisungen dazu:

 

_PAGE_

Diese Anweisung erlaubt es, eine neue Seite zu beschriften

OVERPRINT

über die Zeile wird nochmals gedruckt

 

 

Die Formatkontrolle && ist nicht verfügbar, da die Formatkontrolle & die Zeilen auch bei einem Beobachtungswechsel nicht automatisch freigibt.

 

     DATA _NULL_;

          FILE "/u/ma1/betkurs/ausgabe.aus";

      /* Die Datei kann mit dem vollen Pfad angegeben werden */

          INFILE "eingabe.ein";

      /* Kurzbezeichnung ist auch ausreichend, wenn auf eigenes

         Directory zugegriffen wird */

          INPUT NAME $ 1-10 VORNAME $ 11-18 MATR_NUM 19-25

          SEMESTER 26-28;

          IF SEMESTER > 2 THEN DO;

               PUT VORNAME 1-20 NAME 21-35 SEMESTER 50-52;

          END;

 

5.5    FÜR SIE ZUM ÜBEN

5.5.1                      10. Aufgabe

Es soll eine Listung aller Studenten, die länger als 1 Jahr studieren, ausgedruckt werden, wobei der Vorname mit 20 Zeichen, der Familienname mit 15 Zeichen und in die Semesteranzahl in den Spalten 50-52 auszugeben ist.

 

6     Tips und Tricks der Autoren

6.1    Die RUN-Anweisung

 

Der SAS-Supervisor steuert die Ausführung eines SAS-Programms. Zwei Hauptkomponenten sind dabei beteiligt:

 

·         Der Parser. Er prüft die Syntax des auszuführenden DATA-Steps oder des PROC-Steps. Trifft er dabei auf einen Fehler, so meldet er diesen dem Supervisor, der die weitere Verarbeitung von Daten stoppt. SAS überprüft nurmehr die Richtigkeit der Syntax aller folgenden Steps. Jede PROC hat ihren eigenen Parser. Hat der Parser keinen Fehler gefunden, so ruft der Supervisor

·         das Verarbeitungsprogramm für die betreffende PROC auf. Dieses wertet dann Ihre Daten aus.

 

Ein Step wird geparst und anschließend ausgeführt, wenn

 

·         die nächste Anweisung eine DATA- oder PROC-Anweisung ist

·         im nicht interaktiven Betrieb eine EOF-Marke (Dateiende) gefunden wird

·         die nächste Anweisung eine RUN-Anweisung ist

 

Im interaktiven Betrieb sollte die jeweils letzte Anweisung des Programms eine RUN- Anweisung sein, da sonst die betreffende PROC nicht ausgeführt wird, sondern vielmehr auf eine neuerliche DATA- oder PROC-Anweisung gewartet wird.

 

Eine weitere Aufgabe der RUN-Anweisung ist die Trennung und eindeutige Abgrenzung von TITLE-, FOOTNOTE- und PATTERN-Anweisungen.

 

     DATA HUNDERT;

          INPUT A B C;

          CARDS;

 

 

           ;

     TITLE 'DAS IST DER ERSTE LAUF';

 

     PROC PRINT;

          RUN;

 

     TITLE 'DAS IST DER ZWEITE LAUF';

     PROC PRINT;

 

 

Dieses Beispiel wäre durch eine Umstellung der TITLE-Anweisungen auch ohne RUN-Anweisung zu lösen.

 

Allerdings wird bei umfangreichen PATTERN-Anweisungen, die in SAS/GRAPH zur optimalen Gestaltung der Graphik erforderlich sein können, und die vor der PLOT-Anweisung stehen soll, die RUN-Anweisung aus Gründen der Strukturierung des Programmes notwendig sein.

 

6.2    Arbeiten mit Landkarten

Die PROC GMAP erlaubt es die Ausprägungen einer Variablen in der zugehörigen Landkarte graphisch darzustellen.

 

Wir unterscheiden vier verschiedene Darstellungsformen:

 

·         CHORO die Landesteile werden mit Mustern gefüllt

·         BLOCK Blöcke in der Landesmitte (siehe PROC GCHART BLOCK), geben die Häufigkeiten an, wobei die Blockhöhe den Häufigkeiten entspricht

·         SURFACE keine Ländergrenzen, Pyramiden geben die Anzahl an

·         PRISMA die Landesteile sind abgesetzt, die Höhe entspricht der Anzahl, Füllung mit Mustern

 

Die Vorarbeiten zur Verwendung der Proc GMAP sind folgende:

 

Auffinden der für das Gebiet zutreffenden Karten, dazu sind folgende Schritte erforderlich:

 

 

     proc print data=maps.names;

 

 

Grundsätzlich werden zwei Arten von Karten unterschieden:

·         Karten, die nur eine Datei umfassen, wie Weltkarten, Europakarten. Hier muss  der Ländercode zur Identifizierung des Landes verwendet werden. Diese Karten  werden im folgenden Text einstufige Karten genannt.

 

·         Karten, die in zwei Dateien definiert sind. Das sind die Karten, die nur ein Land (z.B.: Österreich) oder ein Gebiet (Deutschland, Österreich, Schweiz)umfassen. z.B. AUSTRIA MAPS und AUSTRIA2 MAPS. Diese Karten werden im folgenden Text zweistufige Karten genannt.

 

Die Vorgangsweise bei einstufigen Karten kann aus dem folgenden Beispiel

ersehen werden:

 

Aufgabenstellung:

Es soll die Anzahl der Verkaufniederlassungen in Europa graphisch dargestellt werden. Der Betrieb hat in  1230, in  145 und in 1212. Die Anzahl ist durch ein Blockdiagramm auszugeben, jene Länder in denen sich keine Niederlassung befinden, sind trotzdem einzuzeichnen.

 

Durchführung:

 

     DATA TEST3;

          INPUT ID ANZAHL;

     /* Die Variable ID  muss mit der Definition übereinstimmen, die in der

     Länderdatei vorhanden ist. Diese Übereinstimmung muss sich auf den

     Namen und die Merkmalsausprägungen beziehen. */

          CARDS;

               165  1230

               350  145

               590  1212

          ;

 

     PROC GMAP MAP=maps.europe DATA=TEST3 ALL;

     /* Durch die Option ALL werden alle Länder, auch jene, in denen keine

     Beobachtungen vorhanden sind ausgedruckt */

          TITLE 'Anzahl der Verkaufsniederlassungen';

          BLOCK ANZAHL;

          ID ID;

     /* Hier sind jene Variable einzutragen, welche die Identität definieren */

 

Für zweistufige Karten wählen wir folgende Vorgangsweise:

 

1. Feststellen der für das Gebiet definierten Variablen:

 

     proc print data=maps.austria2;

 

2. Programmerstellung

 

     DATA TEST3;

          INPUT ID SEGMENT ANZAHL;

     /*ACHTUNG: Die Karte Österreich ist sowohl durch ID, steht für das

     Bundesland, als auch durch Segment - normalerweise 1, nur Osttirol 2

     definiert. Soll Osttirol die gleiche Schattierung wie Tirol erhalten, so

     sind für beide Werte anzugeben. */

          CARDS;

               1 1   300

               2 1   500

               3 1   800

               4 1   600

               5 1   250

               6 1   900

               7 1  1000

               8 1  1230

               9 1   250

          ;

 

          PROC GMAP MAP=MAPS.AUSTRIA DATA=TEST3 ALL;

               title 'Anzahl der Verkaufsstellen';

               TITLE2 'CHORO';

               PATTERN1 VALUE=M1N045;

               PATTERN2 VALUE=M2N135;

               PATTERN3 VALUE=M3X;

               PATTERN4 VALUE=M5X;

               PATTERN5 VALUE=S;

          CHORO ANZAHL / MIDPOINTS=250 500 750  1000 1250;

               ID ID SEGMENT;

          RUN;

 

               TITLE2 'SURFACE';

          SURFACE ANZAHL / MIDPOINTS=250 500 750  1000 1250;

               ID ID SEGMENT;

          RUN;

 

               TITLE2 'PRISMA';

          PRISMA ANZAHL / MIDPOINTS=250 500 750  1000 1250;

               ID ID SEGMENT;

          RUN;

 

               TITLE2 'BLOCK';

          BLOCK ANZAHL / MIDPOINTS=250 500 750  1000 1250 ;

               ID ID SEGMENT;

          RUN;

 

Bei Landkarten, die über eine mehrstufige Definition verfügen, ist eine Auswahl von Gebieten möglich. Dies wird am Beispiel Deutschlands gezeigt.

 

Aufgabenstellung: Es soll nur die Karte von Bayern ausgegeben werden, wobei für die Städte München und Augsburg Daten vorhanden sind.

 

 

     DATA AUSWAHL;

     /* Wir kopieren die Datei MAPS.GERMANY in die Datei AUSWAHL, wobei

     nur jene Beobachtungen ausgewählt werden, die Bayern (state = 9)

     betreffen. */

          SET MAPS.GERMANY;

               if state = 9;

 

     DATA TEST3;

          INPUT STATE SEGMENT ANZAHL;

     CARDS;

          9 9462          1230

          9 9187          1280

     ;

 

     PROC GMAP MAP=TEST DATA=TEST3 ALL;

          BLOCK ANZAHL;

          ID STATE SEGMENT;

     RUN;

 

 

Es ist auch möglich, über den Gebietsnamen direkt zuzugreifen, dies möge das nächste Beispiel verdeutlichen.

 

Aufgabenstellung: für die Karte Deutschland, Österreich, Schweiz liegen Regionaldaten vor. Die Regionen sind im Langtext angegeben. Die Karte ist auszugeben.

 

 

     DATA TRY;

          INPUT IDNAME $ 1-30 WERT;

     /* Diese Namen finden sich in der Datei GERAUSS2 MAPS und müssen

     übereinstimmen */

          CARDS;

               HESSE               123

               BERLIN              200

               STYRIA              250

               VIENNA CITY         260

               ZURICH              130

               CARINTHIA           160

               BREMEN              250

               AARGAU              210

               BAVARIA             300

          ;

 

     PROC SORT;

     /* Sortieren ist für anschließendes Merge unbedingt erforderlich */

          BY IDNAME;

 

     PROC SORT DATA=MAPS.GERAUSS2 OUT=TRY17;

     /* Auch diese Datei ist zu sortieren, da sie die zweite zum Mergen ist */

          BY IDNAME;

 

     DATA NEXT;

          MERGE TRY17 TRY;

           BY IDNAME;

 

     PROC GMAP MAP=MAPS.GERAUSSW DATA=NEXT ALL;

          TITLE 'ANZAHL DER VERKAUFSSTAENDE';

          TITLE2 'KEINE NEUEN BUNDESLAENDER';

          CHORO WERT;

          ID COUNTRY ID;

 

6.3     EINIGE TIPS ZUR PROC CLUSTER

 

Bei der Clusteranalyse kommt es häufig vor, daß die Nummer des Clusters in die Grund­daten übernommen werden soll. Das nachstehende Programm zeigt die Vor­gangsweise.

 

Beachte! In diesem Programm wird die PROC PRINT mehrfach aufgerufen, um Output zur Kontrolle der Richtigkeit des Programmes zu erzeugen. Dies ist bei produzierenden Programmen nicht erforderlich. Außerdem wird in jedem Schritt eine neue Datei angelegt.

 

            /* Die Breite des Listings wird mit maximal 74 Zeichen je Zeile festgelegt */

       options ls=74;

 

/* Einlesen der CMS‑Datei TEST DATEN, wobei nur einige Variable aus­gewählt werden */

      data test;

            cms filedef daten disk test daten *;

            infile daten;

            input nummer 1‑5  mpg 7‑10 zyl 14 bau 37‑39 name $ 50‑70;

 

/* Sortieren der Daten nach der Variable Name, dies ist für die MERGE‑­Anwei­sung unbedingt notwendig */

      proc sort out=stamm;

            by name;

 

/* Aufruf der CLUSTER‑Analyse, der TREE wird in der SAS‑Datei nix zwischen­ge­speichert. Die Variable name wird der PROC CLUS­TER über­geben, aber von dieser nicht bearbeitet. Bearbeitet werden nur die in der VAR‑Anweisung an­geführten Variablen.Eine Methode ist unbedingt an­zugeben. Die Ausgabe in das Listing wird unter­drückt (Option print=0) */

      proc cluster outtree=nix method=ave print=0;

            var mpg zyl;

            id nummer;

            copy name;

 

/* Ausgabe der Ergebnisse der CLUSTER‑Analyse unter Verwen­dung der PROC TREE, das Ergebnis wird in der CMS‑Datei nix1 gespeichert. Die Variable name wird auch von dieser Prozedur nicht bearbeitet sondern in die Ausgabedatei übertragen. Durch die Option n=10 werden 10 Cluster gebildet. Eine Ausgabe in das Listing soll nicht erfolgen (Option noprint) */

      proc tree out=nix1 n=10 noprint;

            copy name;

            title 'alles';

            run;

 

/* Sortieren der Datei nix1 nach dem Namen */

      proc sort data=nix1;

            by name;

 

/* Zusammenführen der Dateien stamm und nix1 in die neue Datei zu­sammen, wobei die Va­riablen aus stamm und nix1 in diese Datei auf­genommen werden. Natürlich nach dem namen sortiert, somit wird sicher­gestellt, dass die jeweils zusammengehörigen Werte beim MERGE­-Vorgang verwendet werden. */

      data zusammen;

            merge stamm nix1;

            by name;