Benutzer:Hoelters/Spielwiese

Aus SAS-Wiki
Wechseln zu: Navigation, Suche

PROC TRANSPOSE ist eine im Modul Base SAS enthaltene SAS-Prozedur. Mit ihr wird die Struktur von SAS-Tabellen horizontalisiert oder vertikalisiert.

Die Prozedur TRANSPOSE

Überblick

Beim Verarbeiten von Messwerten ist es oft entscheidend in welcher Struktur die Daten vorliegen . Die zu verarbeitenden Datenwerte können in der Datei "untereinander", d.h. in derselben Variable auf verschiedene Beobachtungen verteilt vorliegen - man nennt eine solche Datei vertikal strukturiert. (Prozeduren, die eine solche Struktur voraussetzen sind z.B PROC MEANS und PROC UNIVARIATE).

Die Datenwerte können aber auch "nebeneinander", d.h. in derselben Beobachtung in verschiedenen Variablen vorliegen - man nennt eine solche Datei horizontal strukturiert. (Prozeduren, die eine solche Struktur voraussetzen sind z.B PROC FREQ und PROC TABULATE).

Je nach Art der Auswertung kann die eine oder die andere Struktur günstiger sein. Eine Umwandlung von der einen in die andere Struktur nennt man auch eine Transposition der Datei. Die entsprechenden Variablen/die Tabelle werden dabei transponiert.

Syntax

Die allgemeine Syntax des Prozeduraufrufes von PROC TRANSPOSE ist:

 PROC TRANSPOSE <DATA=Input-SAS-Datei> <LABEL=label> <DELIMITER=delimiter> <LET> <NAME=name> 
   <OUT=Output-SAS-Datei> <PREFIX=prefix> <SUFFIX=suffix>
   BY <DESCENDING> Variable(n)
   <NOTSORTED>;
   ID Variable;
   IDLABEL Variable;
   VAR Variable(n);
   RUN;

Es können Data Set-Optionen in Verbindung mit den DATA= und OUT= Optionen verwendet werden. Im Folgenden werden die wichtigsten Statements und Optionen von PROC TRANSPOSE genauer beschrieben.

Statements und Optionen von PROC TRANSPOSE

DATA= Input-SAS-Datei Es wird die SAS-Datei angegeben, die mit PROC TRANSPOSE bearbeitet werden soll. Default: Die zuletzt erstellte SAS-Datei.
OUT= Output-SAS-Datei Gibt den Namen der Output-SAS-Datei an. Falls nicht angegeben erstellt PROC TRANSPOSE eine Datei und verwendet dabei die DATAn Namenskonvention.
VAR Variable(n) Listet die Variablen auf, welche transponiert werden sollen.
ID Variable Das ID-Statement legt die Variable fest, deren Werte verwendet werden, um neue Variablen in der transponierten Tabelle zu erstellen.
DELIMITER= delimiter Spezifiziert ein Trennzeichen, das beim Erstellen der neuen Variablennamen, die beim Transponieren der Input-SAS-Datei entstehen, verwendet wird.
PREFIX= prefix Spezifiziert ein Präfix, welches verwendet wird um die Variablennamen der transponierten Variablen in der Output-SAS-Datei zu erstellen. Ist etwa PREFIX=VAR, dann bekommen die neuen Variablen die Namen VAR1, VAR2,...
SUFFIX= suffix Spezifiziert ein Suffix, welches verwendet wird um die Variablennamen der transponierten Variablen in der Output-SAS-Datei zu erstellen.
BY Variable(n) Spezifiziert die Variablen, die PROC TRANSPOSE verwendet um BY-Gruppen zu bilden. Wenn die Option NOTSORTED nicht verwendet wird müssen die Werte innerhalb der BY-Variablen sortiert sein.

Beispiele

Vertikalisierung

In der folgenden Tabelle werden zu zwei Patienten (A und B) Puls- und Körpertemperaturwerte zu drei verschiedenen Zeitpunkten festgehalten. Die Messwerte sind auf verschiedene Variablen aufgeteilt, die Datei ist also horizontal strukturiert.

work.messdaten_h

Patient Zeit Puls Temperatur
A 1 72 36.3
A 2 85 36.7
A 3 110 37.2
B 1 80 38.1
B 2 120 38.6
B 3 . 39.0

Um eine Vertikalisierung der Tabelle mit PROC TRANSPOSE zu erreichen wird folgender Code verwendet.

  PROC TRANSPOSE DATA=messdaten_h OUT=vertikal NAME=Messtyp PREFIX=Werte;
   VAR Puls Temperatur;
   BY  Patient Zeit;
   RUN;

Das Ergebnis dieses Prozeduraufrufes ist die folgende Tabelle.

work.vertikal

Patient Zeit Messtyp Werte1
A 1 Puls 72.0
A 1 Temperatur 36.3
A 2 Puls 85.0
A 2 Temperatur 36.7
A 3 Puls 110.0
A 3 Temperatur 37.2
B 1 Puls 80.0
B 1 Temperatur 38.1
B 2 Puls 120.0
B 2 Temperatur 38.6
B 3 Puls .
B 3 Temperatur 39.0

PROC TRANSPOSE transponiert die Werte der Variablen Puls und Temperatur, vertikalisiert also die horizontale Struktur der beiden Variablen zu einer einzigen Spalte/Variable, die mit dem Präfix "Werte" benannt wird. Die Namen der beiden Variablen, die die verschiedenen Messtypen beschreiben, werden in einer neuen ID-Variable, welche über die Option NAME=Messtyp benannt wird, abgespeichert.

Horizontalisierung

In folgenden Beispiel liegen die Messwerte bereits in einer vertikalen Struktur vor. Wir verwenden die Ergebnis-Tabelle aus dem vorherigen Beispiel.

work.messdaten_v

Patient Zeit Messtyp Werte
A 1 Puls 72.0
A 1 Temperatur 36.3
A 2 Puls 85.0
A 2 Temperatur 36.7
A 3 Puls 110.0
A 3 Temperatur 37.2
B 1 Puls 80.0
B 1 Temperatur 38.1
B 2 Puls 120.0
B 2 Temperatur 38.6
B 3 Puls .
B 3 Temperatur 39.0

Die Horizontalisierung dieser Tabelle wird mit dem folgenden Code durchgeführt.

 PROC TRANSPOSE DATA=messdaten_v OUT=horizontal;
   BY Patient Zeit;
   ID Messtyp;
   RUN;

Das Ergebnis dieses Prozeduraufrufs ist folgende Tabelle.

work.horizontal

Patient Zeit _NAME_ Puls Temperatur
A 1 Werte 72 36.3
A 2 Werte 85 36.7
A 3 Werte 110 37.2
B 1 Werte 80 38.1
B 2 Werte 120 38.6
B 3 Werte . 39.0

Die ID-Variable Messtyp wird aufgelöst und in ihre zwei Werte "Puls" und "Temperatur" zerlegt, die jeweils als neue Variable angelegt werden. Die Messwerte werden entsprechend ihrer Zugehörigkeit wieder aus mehreren Beobachtungen in eine Beobachtung zusammengefasst. So erhält man wieder die gewünschte horizontale Struktur.

Hinweis: Im Allgemeinen ist eine horizontal strukturierte Tabelle höherwertig als eine vertikal strukturierte. Die Umwandlung von einer horizontalen zu einer vertikalen Struktur gestaltet sich deshalb im Allgemeinen einfacher als die umgekehrte Umwandlung.

Weblinks