fehlende Werte ersetzen gegen andere

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
Frank61
Beiträge: 12
Registriert: 10.02.2010, 11:16

fehlende Werte ersetzen gegen andere

Beitrag von Frank61 »

Hallo,

mein Problem besteht darin:
Eine Datei aus ca. 13000 Fällen mit der Schlüsselvariablen pat-ID ( ca. 6000 unterschiedliche ID) die allerdings jeweils mehrfach vorkommen können (1:n-Beziehung. Eine 2.te Variable "per protokoll" soll mit "1" für "ja" und "0" für "nein" ausgefüllt sein.
Jetzt ist für 1 Fall der Wert für eine 1:n Beziehung z.b. der Wert " ja"eingetragen und die anderen Felder sind leer. Wie bekomme ich automatisiert für alle Pat-ID diesen Patienten 1000 ebenfalls ein "ja" ? Und diese eben für alle ca. 6000 unterschiedliche pat-Ids? Denn es fehlen tausende von Werten.

Mit Hand ist dies doch sehr zeitraubend, unelegant und fehlerträchtig. :twisted:
georggraph
Beiträge: 114
Registriert: 30.03.2009, 09:39

Beitrag von georggraph »

Hallo Frank,

kann den in Deinen Daten theoretisch der folgende Fall auftauchen?:

patID-PerProtokoll
1------1
1------0

-> das heißt, dass die Variable PerProtokoll für ein und den selben Patienten nciht eindeutig ist?

Falls nicht, dann ließe sich das Problem mit folgender Syntax lösen:

Code: Alles auswählen

* Variable anlegen, die die ursprüngliche Sortierung wiedergibt.
COMPUTE sort = $CASENUM.

* Nach patID und PerProtokoll sortieren.
SORT CASES BY patID (A) PerProtokoll(D).

* Falls ein Fall bei PerProtokoll Missing ist, dann den Wert der darüberliegenden Zelle nehmen, sofern die patID identisch ist.
IF MISSING(PerProtokoll) & patID = LAG(patID) PerProtokoll = LAG(PerProtokoll).

* Die ursprüngliche Sortierreihenfolge wiederherstellen und die Sortiervariable löschen.
SORT CASES BY sort.
DELETE VAR sort.
Viele Grüße,
georggraph
"Ein kaum merkliches Kopfnicken verriet dann, dass er nicht die Absicht habe, diese Frage zu beantworten, und es war Sache des Fragestellers, seinen eigenen Fehler zu erkennen und die Frage neu zu formulieren." (F.Kafka: Der Verschollene)
Frank61
Beiträge: 12
Registriert: 10.02.2010, 11:16

Beitrag von Frank61 »

Hallo,

vielen dank für die rasche und gute Lösung die ich gleich mal ausprobieren werde.
Per Patid kann muss die Antwort per Protokoll imer die gleiche sein, weil alle Fälle pro Patient werden sollen.

Vielen vielen Dank.

Liebe Grüße

Frank R.
Frank61
Beiträge: 12
Registriert: 10.02.2010, 11:16

Beitrag von Frank61 »

Hallo,

habe die Syntax getestet . Es hat wunderbar funktioniert. Große Klasse. Danke.

Wo und wie kann man so was lernen selbst zu schreiben?

Viele Grüße

Frank :D
georggraph
Beiträge: 114
Registriert: 30.03.2009, 09:39

Beitrag von georggraph »

Wo und wie kann man so was lernen selbst zu schreiben?
Bei mir war es im Prinzip learning by doing, anfangs unterstützt von der Command Syntax Reference (dieses pdf-Dokument kann man - ggf. abhängig von der SPSS-Version - über das Hilfe-Menü direkt aufrufen).
Hilfreich ist es auch immer, in den Menüs nicht den Okay-Button, sondern den Einfügen-Button zu drücken - die Syntax wird dann automatisch generiert.

Viele Grüße,
georggraph
"Ein kaum merkliches Kopfnicken verriet dann, dass er nicht die Absicht habe, diese Frage zu beantworten, und es war Sache des Fragestellers, seinen eigenen Fehler zu erkennen und die Frage neu zu formulieren." (F.Kafka: Der Verschollene)
Frank61
Beiträge: 12
Registriert: 10.02.2010, 11:16

Beitrag von Frank61 »

Hallo,

wenn man diesen Vorgang für mehrere (24 Variablen) durchführen muss, kann man dies mit einem Vektor, loop oder Makro lösen? Falls ja wie ungefähr oder exakt?

Hoffentlich kann jemand helfen stehe nämlich vor diesem Problem am Montag.

vielen Dank im voraus für hilfreiche Tipps und Syntax Codes.

Viele Grüße :?:
georggraph
Beiträge: 114
Registriert: 30.03.2009, 09:39

Beitrag von georggraph »

Hallo Frank,

versuch es mal mit dem folgenden Makro namens "!test":

Code: Alles auswählen

* Makrodefinition.
DEFINE !test (!POSITIONAL !CMDEND).
!DO !i !IN (!1).
  COMPUTE sort = $CASENUM.
  SORT CASES BY Pat_ID(A) !i(D).
  IF MISSING(!i) & pat_ID = LAG(pat_ID) !i = LAG(!i).
  SORT CASES BY sort.
  DELETE VAR sort. 
!DOEND.
!ENDDEFINE.

* Makroaufruf.
!test v1 v2 v3 v4 ... v24.
Es beinhaltet eine !DO-Schleife, in der die Variablen v1 bis v24 Schritt für Schritt abgearbeitet werden. Müsste man nicht sortieren, hätte man das Problem auch ohne Makro einfach über eine DO-REPEAT-Schleife lösen können, aber wegen der Sortierung ist ein Makro notwendig.
Einziges Handicap bei der Makrolösung: Beim Makroaufruf kannst Du leider nicht mit dem TO-Befehl arbeiten (also nicht: "v1 TO v24"), sondern Du musst alle Variablennamen dort angeben.

Viele Grüße,
gg
"Ein kaum merkliches Kopfnicken verriet dann, dass er nicht die Absicht habe, diese Frage zu beantworten, und es war Sache des Fragestellers, seinen eigenen Fehler zu erkennen und die Frage neu zu formulieren." (F.Kafka: Der Verschollene)
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