Kann SPSS sich Werte merken?

Fragen und Diskussionen rund um die Arbeit mit SPSS. Für allgemeine Statistik-Themen, die nicht mit SPSS zusammenhängen, bitte das Statistik-Forum nutzen.
Antworten
Uhlnspeegel
Beiträge: 26
Registriert: 13.03.2012, 16:52

Kann SPSS sich Werte merken?

Beitrag von Uhlnspeegel »

Hallo,

gibt es in SPSS einen Befehl, mit dem man Werte quasi in einem Zwischenspeicher ablegen kann, um sie nachher wieder zu verwenden?

Das Problem ist wie folgt: Ich soll Reaktionszeiten auf Ausreißer überprüfen. Jeder Fall kennzeichnet eine Aufgabe mit einer Reaktionszeit. Ich soll Werte finden, die um 3 Standardabweichungen vom Mittelwert abweichen. Die kritischen Werte (Mittelwert +/-3 Standardabweichungen) stehen in einem Fall in seperaten Variablen am Ende des Dokuments. Um die Reaktionszeiten mit den kritischen Werten vergleichen zu können, möchte ich, dass jeder Fall für die Variable "kritischer Wert" den gleichen Wert bekommt. Vorgestellt hatte ich mir das folgendermaßen:

-Wähle Fall X aus und lege den Wert von Variable Y in Zwischenspeicher ab
-Wähle alle Fälle aus
-Berechne Variable Y = zwischengespeicherter Wert

Alternativ könnte man die Reaktionszeiten vieleicht auch direkt mit den zwischengespeicherten Werten vergleichen.

Ich bin auch für andere Lösungsvorschläge dankbar.

Beste Grüße

Uhlnspeegel
drfg2008
Beiträge: 2391
Registriert: 06.02.2011, 19:58

re

Beitrag von drfg2008 »

Kann SPSS sich Werte merken
Nur darauf (es gibt anderere Lösungswege).

Ja. Mit Python Integration. Siehe meine Beiträge auf youtube.
drfg2008
Uhlnspeegel
Beiträge: 26
Registriert: 13.03.2012, 16:52

Beitrag von Uhlnspeegel »

Vielen Dank für die Antwort und für's aufnehmen der Videos.

Ich habe es genauso gemacht wie in Python-Video #8, abgesehen von den Variablennamen:
______________________________
BEGIN PROGRAM.
import spss, spssaux
Tabelle = "DESCRIPTIVES VARIABLES=Kombinierte_RZ"
Befehle,errcode=spssaux.CreateXMLOutput(
Tabelle,
omsid="Descriptives")
mean=spssaux.GetValuesFromXMLWorkspace(
Befehle,
tableSubtype="Descriptive Statistics"
rowCategory="Kombinierte_RZ",
collCategory="Mean",
cellAttrib="text")
print mean
print Tabelle
END PROGRAM.
___________________________________

Leider bekomme ich folgende Fehlermeldung:
____________________________________
File "<string>", line 10
rowCategory="Kombinierte_RZ",
^
SyntaxError: invalid syntax
___________________________________
Was mache ich falsch?

Gruß

Uhlnspeegel
drfg2008
Beiträge: 2391
Registriert: 06.02.2011, 19:58

re

Beitrag von drfg2008 »

Die Nutzung von Python setzt gute Kenntnis einer recht anspruchsvollen Programmierumgebung voraus. Am besten erst einmal Python Videos ansehen. Zum Beispiel muss bei Python sehr sorgfältig darauf geachtet werden, dass zusammengehörige Programmierblöcke die exakt gleichen Abstände vom Rand besitzen, da Python nicht über Klammern verfügt.

Hier eine korrekte Syntax:

Code: Alles auswählen

BEGIN PROGRAM.
import spss,spssaux
spss.Submit("GET  FILE='C:/<... Pfad ...>/tu-berlin.sav'.")
cmd="DESCRIPTIVES VARIABLES=Schicht,Geschlecht,Alter,Bewertung."

desc_table,errcode=spssaux.CreateXMLOutput(
                                                                     cmd,
                                                                     omsid="Descriptives")
meansal=spssaux.GetValuesFromXMLWorkspace(
                                                                         desc_table,
                                                                         tableSubtype="Descriptive Statistics",
                                                                         rowCategory="Bewertung",
                                                                         colCategory="Mittelwert",
                                                                         cellAttrib="text")
if meansal:
               print "Der Mittelwert von Bewertung ist: ", meansal[0]
END PROGRAM.
drfg2008
Uhlnspeegel
Beiträge: 26
Registriert: 13.03.2012, 16:52

Beitrag von Uhlnspeegel »

Danke für das Beispiel, es hat mir geholfen Schreibfehler, fehlende Kommas und Punkte zu finden. Mittlerweile funktioniert es.
Allerdings habe ich jetzt das Problem, dass in String umgewandelte Werte mit eckigen Klammern und Anführungszeichen ausgegeben werden:

print mean
Krit_Befehl="compute kritischer_Wert="+str(mean)+"."
print Krit_Befehl
#spss.Submit(Krit_Befehl)
END PROGRAM.
['1177.21']
compute kritischer_Wert=['1177.21'].

Auf die Art erkennt SPSS den Wert nicht, wenn ich ihn in den spss.Submit-Befehl packe. Wie kriege ich es hin, dass nur die Zahl da steht?
drfg2008
Beiträge: 2391
Registriert: 06.02.2011, 19:58

re

Beitrag von drfg2008 »

das ist ein Python spezifisches Problem der Umwandlung von Datenformaten. ['1177.21'] hier muss dann erst die eigentliche Zahl herausgelesen werden. Das geht allerdings recht einfach.

Hier eine interessante Einführung in Python (englisch):

http://www.youtube.com/watch?v=4Mf0h3HphEA
drfg2008
Uhlnspeegel
Beiträge: 26
Registriert: 13.03.2012, 16:52

Beitrag von Uhlnspeegel »

So, jetzt funktioniert's.

Für den Fall, dass jemand auf das gleiche Problem stößt: Wenn man nach der oben angegebenen Art Werte aus Descriptives-Tabellen mit Python einliest, dann werden die Werte in Python als Liste (list) gespeichert. Listen werden von Python immer nach folgendem Schema ausgegeben:

mean=['Wert1','Wert2','Wert3',...] für die Liste "mean"

Um z.B. Wert1 ohne Anführungszeichen und Klammern auszulesen kann man eine Variable (mean_string) definieren, in die man das erste Element der Liste einliest (in der Praxis gibt es natürlich nur einen Mittelwert, die Liste enthält dementsprechend nur ein Element).

mean_string=mean[0]


Jetzt habe ich aber trotzdem noch ein Problem: Wenn ich versuche, auch noch die Standardabweichung einzulesen, dann bleibt die Liste leer, so als wäre die Standardabweichung nicht in der Descriptives-Tabelle enthalten. Muss ich Python extra sagen, dass die Standardabweichung bei den deskriptiven Statistiken mitberechnet werden soll?

Gruß

Uhlnspeegel
drfg2008
Beiträge: 2391
Registriert: 06.02.2011, 19:58

re

Beitrag von drfg2008 »

das geht doch viel einfacher. Hier noch einmal mein Beispiel von oben:

Code: Alles auswählen

tableSubtype="Descriptive Statistics",
                rowCategory="Bewertung",
                colCategory="Mittelwert",
                cellAttrib="text")
Damit wird Python genau mitgeteilt, wo genau in der Tabelle der Wert zu finden ist, nämlich in der Zeile Bewertung UND Spalte Mittelwert.

Um jetzt also mehrere Werte auszulesen, dann jeweils die genaue Zeile und Spalte des gesuchten Werts angeben.

Dann dürfte auch das Problem mit den Listen nicht auftreten.

Beispiel zum Auslesen von Arrays:

http://www.youtube.com/watch?v=mPe7hI9c0_k
drfg2008
Uhlnspeegel
Beiträge: 26
Registriert: 13.03.2012, 16:52

Beitrag von Uhlnspeegel »

So, habe es hinbekommen. Der Fehler war, dass Std. Deviation -ganz Spss-untypisch- mit Leerzeichen geschrieben wird (viel Lärm um nichts, sorry!).

Was ich leider nicht hinbekomme, ist Mittelwert und Standardabweichung in einem Aufwasch einzulesen, zum Beispiel durch:

colCategory=["Mean","Std. Deviation"],

aber es geht ja auch so.

Vielen Dank für die Hilfe!
Anzeige:Statistik und SPSS: Die besten Bücher
Als Buch oder E-Book - Jetzt bestellen
spss datenanalyse
SPSS - Moderne Datenanalyse - Jetzt bestellen!
statistik datenanalyse
Statistik - Der Weg zur Datenanalyse - Jetzt bestellen!
Antworten