|
Tipps und Lösungen
Im Folgenden werden einzelne Tipps und
auch Lösungen vorgestellt, die vielleicht mitunter die
Arbeit etwas erleichtern können oder die Funktionen zugänglich
machen, die über das Menü nicht zugänglich
sind. Die Liste wird sukzessive erweitert.
Desiderat: Eine numerische Variable
soll in eine neue Textvariable übertragen werden, so,
dass die Wertelabels der numerischen Variable zu den Datenwerten
der Textvariable werden.
Eine numerische Variable mit den Ausprägungen 1und 2
und den dazugehörigen Wertelabeln "Äpfel"
und "Birnen" soll übertragen werden in eine
neue Textvariable, die die Wertelabel der numerischen Variable
als Datenwerte aufweist..
Lösung:
Die folgende Syntax führt zum gewünschten
Ergebnis:
/* Der Datensatz mit
der numerischen Variable obst wird erstellt.
DATA LIST free / obst.
BEGIN DATA.
1
2
END DATA.
VALUE LABELS obst 1 "Äpfel" 2 "Birnen".
EXECUTE.
/* Eine neue Variable mit 100 Stellen wird erstellt. Wenn
nötig, Zahl erhöhen.
STRING obst_text (A100).
/* Testet, ob ein Wertelabel für einen Wert von obst
existiert; wenn ja, wird obst_text dieses Wertelabel
zugewiesen.
IF (CHAR.LENGTH(VALUELABEL(obst)) > 0) obst_text = VALUELABEL(obst).
EXECUTE.
/* Mit einigen LOCALE- und UNICODE-Einstellungen kann es führende
Leerzeichen geben.
/* Diese Anweisung entfernt diese Leerzeichen. Wenn es Gründe
gibt, die führenden Leerzeichen zu behalten, bitte die
folgenden beiden Zeilen entfernen.
COMPUTE obst_text = LTRIM(obst_text).
EXECUTE.
/* Die Variablengröße wird anhand der Daten auf
die benötigte Größe hin reduziert.
ALTER TYPE obst (AMIN).
Letzter Stand: 19.10.2011
Desiderat: Umkodieren einer
Variable mit Definition eines nutzerdefinierten fehlenden
Wertes
Eine Variable mit Ausprägungen 0, 1 und systemfehlender
Wert soll in eine neue Variable umkodiert werden, so dass
die Werte 1, 2 und nutzerdefinierter Wert 99 vorhanden sind..
Lösung:
Die folgende Syntax führt zum gewünschten
Ergebnis:
DATA LIST / x (F2.0).
BEGIN DATA
0
0
1
1
END DATA.
EXECUTE.
DO IF SYSMIS(X).
COMPUTE Y = 99.
ELSE IF (X EQ 0).
COMPUTE Y=1.
ELSE IF (X NE 0).
COMPUTE Y=2.
END IF.
MISSING VALUES Y (99).
EXECUTE.
Das Ergebnis sieht dann so aus:

Bitte beachten, dass nur die obige Version
der Syntax zum gewünschten Ergebnis führt; die folgende
Version führt nicht zum Erfolg (der
nutzerseitig definierte fehlende Wert wird nicht definiert!):
DO IF (X EQ 0).
COMPUTE Y=1.
ELSE IF (X NE 0).
COMPUTE Y=2.
ELSE IF SYSMIS(X).
COMPUTE Y = 99.
END IF.
MISSING VALUES Y (99).
EXECUTE.
Letzter Stand: 31.08.2011
Desiderat: Einem 3D-Streudiagramm
eine Anpassungsebene hinzufügen
Einem Streudiagramm mit drei Dimensionen soll das Äquivalent
einer Anpassungslinie, eine Anpassungsebene hinzugefügt
werden.
Lösung:
Die Syntax der Grafik muss editiert
werden. Dazu wird im Assistenten nach der Spezifizierung des
Streudiagramms der Knopf "Einfügen" gedrückt.
Danach öffnet sich ein Syntax-Fenster, in das die Spezifizierung
des Plots als sogenannte Syntax-Anweisung eingefügt wird.
Diese muss nun "per Hand" modifiziert werden. Es
wird eine Element-Anweisung eingefügt. Möglich sind
außer der linearen Anpassung auch andere Verfahren der
Anpassung (siehe Handbuch zur GPL-Sprache).
Beispiel der Syntaxanweisungen mit rot
hervorgehobenen Veränderungen:
GGRAPH
/GRAPHDATASET NAME="graphdataset" VARIABLES=salbegin
salary jobtime MISSING=LISTWISE
REPORTMISSING=NO
/GRAPHSPEC SOURCE=INLINE.
BEGIN GPL
SOURCE: s=userSource(id("graphdataset"))
DATA: salbegin=col(source(s), name("salbegin"))
DATA: salary=col(source(s), name("salary"))
DATA: jobtime=col(source(s), name("jobtime"))
COORD: rect(dim(1,2,3))
GUIDE: axis(dim(1), label("Months since Hire"))
GUIDE: axis(dim(2), label("Beginning Salary"))
GUIDE: axis(dim(3), label("Current Salary"))
ELEMENT: point(position(jobtime*salbegin*salary))
ELEMENT: line(position(smooth.linear(jobtime*salbegin*salary)))
END GPL.
Hier nun ein Beispiel (mit der mitgelieferten
Datendatei: Employee.sav):

Letzter Stand: 14.07.2011
Desiderat: Die Verteilung der
einzelnen Fälle im Boxplot ausgeben
Die Verteilung der Fälle über den Wertebereich der
metrischen Variable soll im Rahmen eines Boxplots zusätzlich
mit eingezeichnet werden. Die resultierende Grafik kommt einem
Violin-Plot sehr nahe.
Lösung:
Die Syntax der Grafik muss editiert
werden. Dazu wird im Assistenten nach der Spezifizierung des
Boxplots der Knopf "Einfügen" gedrückt.
Danach öffnet sich ein Syntax-Fenster, in das die Spezifizierung
des Plots als sogenannte Syntax-Anweisung eingefügt wird.
Diese muss nun "per Hand" modifiziert werden. Zuerst
wird eine Element-Anweisung eingefügt und die schon Bestehende
modifiziert.
Beispiel der Syntaxanweisungen mit rot
hervorgehobenen Veränderungen:
GGRAPH
/GRAPHDATASET NAME="graphdataset" VARIABLES=ps MISSING=LISTWISE
REPORTMISSING=NO
/GRAPHSPEC SOURCE=INLINE.
BEGIN GPL
SOURCE: s=userSource(id("graphdataset"))
DATA: ps=col(source(s), name("ps"))
DATA: id=col(source(s), name("$CASENUM"), unit.category())
COORD: rect(dim(1), transpose())
GUIDE: axis(dim(1), label("PS"))
ELEMENT: point.dodge.symmetric(position(bin.dot(ps,
dim(1))), color(color.white), color.exterior(color.blue),
size(size."3"), shape(shape.circle), transparency.exterior(transparency."0.4"))
ELEMENT:
schema(position(bin.quantile.letter(ps)), label(id), transparency(transparency."0.6"))
END GPL..
Über die "color"-, "size"-
und "transparency"-Einstellungen kann entsprechend
modifiziert werden (siehe GPL Reference Guide).
Hier nun ein Beispiel (mit der Datei
Cars.sav):

Letzter Stand: 28.01.2010
Übersicht
über die verschiedenen benötigten Versionen der
SPSS-Erweiterungen (R und Python) bei der Vielzahl an unterschiedlichen
SPSS-Versionen
| Version
von SPSS |
R-Version |
Python-Version |
Version
R- und Python-Plugin;
ab Version 18:
R- und Python-Essentials |
| 17.0 |
2,7 |
2.5 |
17.0
(R und Python müssen extra installiert werden) |
| 17.0.1 |
2.7 |
2.5 |
17.0.1
(R und Python müssen extra installiert werden) |
| 17.0.2 |
2.7 |
2.5 |
17.0.2
(R und Python müssen extra installiert werden) |
| 18.0 |
2.8 |
2.6 |
18.0
(win32 und 64;
mit R- und Python-Versionen) |
| 18.0.1 |
2.8 |
2.6 |
18.0.1
(win32 und 64;
mit R- und Python-Versionen) |
| 18.0.2
und 18.0.3 |
2.8 |
2.6 |
18.0.2
(win32 und 64;
mit R- und Python-Versionen) |
| 19.0 |
2.10 |
2.6 |
19.0
(win32 und 64;
mit R- und Python-Versionen) |
|
19.0.0.1 |
2.10 |
2.6 | 19.0.0.1
(win32 und 64;
Python-Versionen)
19.0
(win32 und 64;
R-Versionen)
|
Letzter Stand: 01.02.2011
Desiderat: Bei
einem gestapelten Balkendiagramm soll die x-Achse durch mehrere
einzelne Variablen definiert werden (und nicht durch die Ausprägungen
einer einzigen Variable)
Bei einem Balkendiagramm sollen acht verschiedene Variablen,
die beispielsweise als Items einer Skala zur politischen Partizipation
mit 0 (= nicht getan) und 1 (= getan) kodiert wurden, die
x-Achse definieren. Eine weitere Variable (z.B. zum Geschlecht)
soll die Untergliederung der Säulen definieren.
Lösung:
Die Spezifizierung mit Hilfe des Grafik-Assistenten
(Diagrammerstellung) ist etwas kompliziert. Aus der Grafikgalerie
wird beispielsweise das gestapelte Balkendiagramm ausgewählt.
Dann werden die zu verwendenden Variablen für die x-Achse
markiert. (Falls diese nicht als metrisch - Skala - definiert
sind, müssen sie mit Hilfe der rechten Maustaste zumindest
temporär als metrisch deklariert werden. Dann wird der
Block der markierten Variablen auf die y-Achse gezogen. Bei
den Elementeigenschaften muss danach als Statistik die Summe
für alle Variablen eingestellt werden. Anschließend
wird noch die Variable zum Geschlecht als Stapelvariable rechts
oben definiert. (Das Ganze funktioniert auch zum Beispiel
mit einfachen Balkendiagrammen und mit Liniendiagrammen.)
In Form von Syntaxanweisungen sieht
das folgendermaßen aus:
GGRAPH
/GRAPHDATASET NAME="graphdataset" VARIABLES=SUM(item1)
SUM(item2) SUM(item3) SUM(item4) SUM(item5) SUM(item6) SUM(item7)
SUM(item8) geschlecht MISSING=LISTWISE REPORTMISSING=NO
TRANSFORM=VARSTOCASES(SUMMARY="#SUMMARY" INDEX="#INDEX")
/GRAPHSPEC SOURCE=INLINE.
BEGIN GPL
SOURCE: s=userSource(id("graphdataset"))
DATA: SUMMARY=col(source(s), name("#SUMMARY"))
DATA: INDEX=col(source(s), name("#INDEX"), unit.category())
DATA: geschlecht=col(source(s), name("geschlecht"),
unit.category())
GUIDE: axis(dim(2), label("Summe"))
GUIDE: legend(aesthetic(aesthetic.color.interior), label("Geschlecht
"))
SCALE: cat(dim(1), include("0", "1", "2",
"3", "4", "5", "6",
"7"))
SCALE: linear(dim(2), include(0))
SCALE: cat(aesthetic(aesthetic.color.interior), include("1",
"2"))
ELEMENT: interval.stack(position(INDEX*SUMMARY), color.interior(geschlecht),
shape.interior(shape.square))
END GPL.
Und noch das Beispiel als Grafik:

Letzter Stand: 28.03.2010
Desiderat: Fallzahl in Boxplots
ausgeben
Es sollen bei Boxplots für jede Ausprägung der Variable
auf der x-Achse die Fallzahlen mit in der Grafik ausgegeben
werden. (Das ging früher mit der interaktiven Grafik,
mit dem Assistenten zur Grafikerstellung geht es aber nicht
mehr; die interaktive Grafik gibt es mittlerweile (Version
18) auch nicht mehr.)
Lösung:
Die Syntax der Grafik muss editiert
werden. Dazu wird im Assistenten nach der Spezifizierung des
Boxplots der Knopf "Einfügen" gedrückt.
Danach öffnet sich ein Syntax-Fenster, in das die Spezifizierung
des Plots als sogenannte Syntax-Anweisung eingefügt wird.
Diese muss nun "per Hand" modifiziert werden. Zuerst
wird eine TRANS-Anweisung eingefügt und dann ein Point-Element.
Beispiel der Syntaxanweisungen mit rot
hervorgehobenen Ergänzungen:
GGRAPH
/GRAPHDATASET NAME="graphdataset" VARIABLES=land
gewicht MISSING=LISTWISE REPORTMISSING=NO
/GRAPHSPEC SOURCE=INLINE.
BEGIN GPL
SOURCE: s=userSource(id("graphdataset"))
DATA: land=col(source(s), name("land"), unit.category())
DATA: gewicht=col(source(s), name("gewicht"))
DATA: id=col(source(s), name("$CASENUM"), unit.category())
TRANS: labelPosition = eval(0)
GUIDE: axis(dim(1), label("Herstellungsland"))
GUIDE: axis(dim(2), label("Gewicht (lbs.)"))
SCALE: cat(dim(1), include("1", "2", "3"))
SCALE: linear(dim(2), include(0))
ELEMENT: schema(position(bin.quantile.letter(land*gewicht)),
label(id))
ELEMENT: point(position(land*labelPosition),
size(size."0px"), label("N = "), label(summary.count()))
END GPL.
Hier nun ein Beispiel (mit der Datei
Cars.sav):

Leider funktioniert die Ausgabe in einer
Zeile nicht so wie im Handbuch zu GPL beschrieben, deshalb
wurde als zweitbeste Lösung die Ausgabe in zwei Zeilen
gewählt.
Letzter Stand: 16.12.2009
|