Hallo,
Ich arbeite mit einem Längsschnittdatensatz in SPSS und möchte einige Fälle herausfiltern. Es sind zu viele um das per Hand zu machen, aber den normalen Filter „Fälle auswählen“ kann ich auch nicht benutzen, da die Informationen zu einer Person (die Ereignisse) über mehrere Zeilen hinweg angeordnet sind. SPSS erkennt mehrere zu einer Person gehörige Zeilen nicht als „Block“. Was könnte ich noch tun, um tausende Fälle per Hand durchzugehen?
SPSS hat eine sehr gute Filterfunktion:
„Select if“ - in der Makrosprache, damit kann man auch viele Bedingungen eingeben und sehr spezifische Fälle herausssuchen.
Die Daten sollten wie in Fall 1 angeordnet sein, wenn nicht (zB wie in Fall 2), dann kannst du sie durch Sortieren in die richtige Reihenfolge bringen.
Schreibe dann die Daten raus, zB als CSV und lies sie wieder ein, stelle nun aber sicher, dass du SPSS mitteilst, dass pro Person mehrere Datenzeilen vorliegen (du musst die Variable ID dann mehrmals benennen (zb ID_Zeile1, ID_Zeile2 etc., entsprechend auch mit den anderen Vars verfahren). Nun hast du einen neuen Datensatz mit der richtigen Anzahl von Fällen).
Dieses Verfahren würde ich empfehlen, wenn du für jede ID gleich viel Wiederholungsmessungen hast und du die Daten auch in dieser Form weiter verwenden wirst.
Eine 2. Möglichkeit ist, dass du eine Datei generierst, die nur die ID als Variable hat. Hier löschst du alle IDs, die du nicht haben willst und machst dann ein ‚Merge‘ mit der Option, dass nur vollständige Datensätze aufgenommen werden. Ich habe das nicht getestet, sollte aber gehen.
In jeder Zeile Deines Datensatzes sollte eine Variable existieren, welche die Identität der Person bestimmt (z.B. VPN_NR = 1). Mit dieser Variable kannst Du alle Fälle dieser Person ausschließen.
wahrscheinlich waren das doch zu wenig Infos. Also es sieht so aus:
VPN-NR Ereignis SPELLNR
1 a 1
1 b 2
1 c 3
2 c 1
2 a 2
3 d 1
3 a 2
3 b 3
3 a 4
Wenn ich nun Fälle auswähle z.B. Ereignis=b, dann wählt SPSS die ZEILE und nicht die PERSON aus.
Ich habe bisher den Hinweis bekommen, die Daten aus einer Textdatei neu einzulesen und SPSS zu sagen, dass gleiche VPN-Nummern zu einer Person gehören. Wie man das macht, weiß ich zwar noch nicht, aber evtl. finde ich das auch noch heraus. Oder gibt es noch einen anderen Ansatz?
hallo!
ohne zu wissen, was für daten in den zellen stecken und wie der datensatz aussieht und welche kriterien du für die auswahl hast, ist die antwort schwierig!!
für den fall, dass die informationen über eine Person zwar in mehreren Zeilen stecken, dass jede Info aber eine neue Variable ist, kannst du die „fälle auswählen“ funktion nutzen , wenn auch nicht durch reines durchklicken. du musst eine kleine syntax schreiben, die nach dem muster verfährt „select if var1 = ?? or var2 = ???“ und hast dann nur die fälle, auf die das zutrifft.
du könntest die fälle auch rauswerfen, indem du über „compute“ eine neue variable erstellst, die immer dann ein „fehlender wert“ ist, wenn die bedingung var1 = ?? oder var2 = ??? erfüllt ist. das muss wahrscheinlich auch über eine syntax gemacht werden.
alternativ, falls alles untereinander steht, fällt mir nur die nicht so schöne idee ein, eine dummyvariable zu erstellen - haben alle fälle immer die gleiche zeilenanzahl? dann könnte man eine variable erstellen, die von oben nach unten durchzählt vom der ersten zeile eines falls bis zu letzten zeile, danach eine select if- syntax siehe oben.
antwort II
so, nachdem ich die neuen infos gelesen habe:
ich weiß nicht, nach welchem kriterium du filtern willst, aber
meine idee dazu immernoch: syntax schreiben „select if“, aber mit einer „und-verbindung“, also die fälle auswählen, in denen bspw. „ereignis= b und spell = 1“
da kann man auch reinschreiben, dass spss z.B. die fälle auswählen soll, in denen eine var keinen fehlenden wert hat „select if ereignis = b & notmissing varx“ oder wie du das brauchst für deine analyse, auch kompliziertere verknüpfungen bzw. auswahlkriterien sind denkbar.
Wenn ich nun sagen würde select if Ereignis=b, dann würde SPSS doch nur die zweite Zeile wählen und die restlich Informationen zu Person 1 ausblenden. Oder gibt es da eine Möglichkeit?
ID : SPELLTYP : SPELLNR
1 : a : 1
1 : b : 2
2 : b : 1
2 : a : 2
2 : c : 3
3 : c : 1
3 : a : 2
Daten rausschreiben ist ok, aber wie teile ich SPSS beim Wiedereinlesen mit, dass pro Person mehrere Zeilen vorhanden sind? Durch SPELLNR ist ja jede Zeile pro Person durchnummeriert. Ich habe auch schon herausgefunden, dass man das machen muss, ist nun so, aber es hilft mir auch nicht weiter Für jede ID gibt es unterschiedlich viele Zeilen.
Deine zweite Möglichkeit ginge zur Not auch, aber es sind immerhin ca. 94.000 Zeilen die dann durchgeschaut werden wollen :-o
SPSS kann in der „select if“ Bedingung auch mehre Ausprägungen auswählen.
z.B. select if ((x=a) or (x=b)).
Allerdings konnte ich bei meiner alten Version von SPSS einige Fehler beobachten, aber das kann auch von Windows herkommen. Die Klammern erhöhen die Sicherheit, dass die Auswahl richtig und vollständig getroffen wurde.
Eine weitere Möglichkeit besteht mit „DO IF“ Anweisungen eine neue Variable zu berechnen, die dann nur mehr eine einzige Selektionsbedingung erhält. (SPSS hat dabei nur sehr selten Fehler gemacht.)
Beispiel: (es können mehrere Variable als Kriterium herangezogen.)
DO IF ((x=1) or (y=2)).
compute neue_var = 1.
else compute neue_var = 0.
END IF.
Select if (neue_var = 0).
Eine dritte Möglichkeit besteht darin,
mehrere „select if“ Bedingungen hintereinander einzusetzen. Aber damit wird die Stichprobe auf Fälle reduziert die in ALLEN selektierten Bedingungen stimmen müssen.
Als vierte Möglichkeit:
Jeweils nach einem Kriterium die Fälle auswählen und in eine eigene neue Datei schreiben lassen. Und dann alle diese Teil-Dateien wieder zusammensetzen.
@für jede ID gibt es unterschiedlich viele Zeilen.
Das hatte ich befürchtet. Da hilft m.E. nur Programmieren. Das wäre in SPSS zu lösen, in anderen Sprachen (zB Perl) wäre das aber viel eleganter zu lösen.
Hast du mal in SPSS-Foren geschaut. Da gibt es teilweise auch geniale Lösungen. Ich habe leider nicht die Zeit für dich zu suchen.
Jetzt verstehe ich Dein Problem. Du möchtest Deinen Datensatz so verändern, dass er nachfolgende Struktur aufweist, richtig?
VPN_NR Ereignis_SP1 Ereignis_SP2 Ereignis_SP3 Ereignis_SP4
1 a b c -
2 c a - -
3 d a b a
Das ereichst Du in SPSS mit Hilfe des Kommandos AGGREGATE:
(1) Zunächst bildest Du die neuen Variablen Ereignis_SP1, Ereignis_SP2, Ereignis_SP3 und Ereignis_SP4 und weist ihnen jeweils nur in den Cases einen Wert zu, in denen die SPELLNR mit der Endung der Variablen übereinstimmt.
(2) Nun fasst Du alle Fälle einer Versuchsperson mit Hilfe von AGGREGATE zusammen, wobei Du für die Variablen Ereignis_SP1, Ereignis_SP2, Ereignis_SP3, Ereignis_SP4 jeweils die Aggeregate-Funktion „first“ wählst, während Du die Variablen Ereignis und SPELLNR weglässt (Option „drop“).
Allerdings rate ich Dir, dies noch einmal in einem der vielen Einführungsbücher für SPSS nachzulesen. Einem Anfänger unterlaufen bei diesen Operationen schnell kleine Fehler, welche die Daten aber stark verzerren können.
Einen anderen Weg zur Längsschnittanalyse gibt es in SPSS meines Wissens nicht. Dafür müsstest Du auf ein komplexeres Analyseprogramm (z.B. GenStat, GNU-R) umsteigen.