Variablenberechnung einzeln oder hintereinander?

Alles rund um SPSS Syntax und Programmierung.

Variablenberechnung einzeln oder hintereinander?

Beitragvon Regina85 » Mo 10. Okt 2011, 11:18

Hallo liebe Experten,

hoffentlich könnt Ihr mir bei einem Problem mit der Syntax helfen: Ich habe eine Reihe von Variablenberechnungen für die Berechnung von Erinnerungswerten vor, bei denen 2 Variablen miteinander gekreuzt werden. Die eine gibt an, ob jemand sich an ein bestimmtes Motiv erinnert (1=ja, 2=nein), die andere, ob das Motiv überhaupt gezeigt wurde (1=ja, 2=nein). Es resultiert also eine neue Variable mit max. 4 Ausprägungen: 1=gezeigt und erinnert, 2=gezeigt und nicht erinnert, 3=angeblich erinnert und nicht gezeigt (Fehlnennung), 4=nicht erinnert und nicht gezeigt.

Die Logik ist also Angabe x Motiv = Neue Variable (s.u.).

Nun erhalte ich manchmal unterschiedliche Werte in den neue Variablen, je nachdem, ob ich die Syntax stückweise durchlaufen lasse oder alles markiere und dann alles auf einmal durchläuft. Die Ausgangsvariablen sind aber identisch und enthalten auch keine fehlenden Werte, sondern sind dichotom nach 1 und 2 kodiert, wie oben angegeben. Meine Syntax sieht so aus:

/*NEUE VARIABLE 1.

DO IF (ANGABE1 =1 & MOTIV1=1).
COMPUTE MOTIV_NEU1 = 1.
ELSE IF (ANGABE1 ~=1 & MOTIV1 =1).
COMPUTE MOTIV_NEU1 =2.
ELSE IF (ANGABE1 =1 & MOTIV1 ~=1).
COMPUTE MOTIV_NEU1 =3.
ELSE .
COMPUTE MOTIV_NEU1 =4.
END IF.
EXECUTE.

[Hinweis: ANGABE1 ist die Ausgangsvariable und enthält "1" für erinnert und "2" für nicht erinnert, MOTIV1 ist die Ausgangsvariable für Motiv1 gezeigt: Ja"1" bzw. Nein "2". MOTIV_NEU1 ist die zu erstellende neue Variable. Bei den foglenden Variablen entsprechend.]

/*NEUE VARIABLE 2.

DO IF (ANGABE2 =1 & MOTIV2=1).
COMPUTE MOTIV_NEU2 = 1.
ELSE IF (ANGABE2 ~=1 & MOTIV2 =1).
COMPUTE MOTIV_NEU2 =2.
ELSE IF (ANGABE2 =1 & MOTIV2 ~=1).
COMPUTE MOTIV_NEU2 =3.
ELSE .
COMPUTE MOTIV_NEU2 =4.
END IF.
EXECUTE.

/*NEUE VARIABLE 3*.

[...]

Eigentlich sollte es doch keinen Unterschied machen, ob ich das einzeln oder am Stück ablaufen lasse, oder? Die Variablen haben ja untereinander keine Verbindung, so dass nicht eine Berechnung die folgende beeinflussen dürfte. Und auch ein EXECUTE habe ich immer dahinter.

Kann mir jemand helfen?

Danke und LG,
Regina
Regina85
 
Beiträge: 7
Registriert: Mo 10. Okt 2011, 10:53
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Variablenberechnung einzeln oder hintereinander?

Beitragvon STATWORX » Mo 10. Okt 2011, 22:59

Hallo Regina,

das ist wirklich sehr verwunderlich. Kann es sein, dass Du evtl. Variablennamen vertauscht hast (Angabe1, 2, 3..., Motiv1, 2, 3 usw.).
Könntest Du einmal die kompletten (relevante) Syntax posten? Dann schauen wir da mal drauf.

Viele Grüße
STATWORX
STATWORX
Administrator
 
Beiträge: 87
Registriert: So 25. Sep 2011, 16:21
Danke gegeben: 0
Danke bekommen: 6 mal in 6 Posts

Re: Variablenberechnung einzeln oder hintereinander?

Beitragvon Regina85 » Di 11. Okt 2011, 13:54

Hallo Statworx,

danke für Deine Hilfe. Hier meine Syntax, wobei die Variablen etwas anders heißen, aber die Logik die gleich ist:

F3_(x) ist die Ausgangsvariable und enthält "1" für erinnert und "2" für nicht erinnert, VAR(y) ist die Ausgangsvariable für Motiv(y) gezeigt: Ja"1" bzw. Nein "2". F3_(x)_KT ist die zu erstellende neue Variable. Bei den foglenden Variablen entsprechend. (x) ["JAG" usw.] und (y) [121 usw.] richten sich nach den Ausgangsvariablen und lauten deswegen etwas kryptisch.

Danke und LG,
Regina.

/***************************************************************************************************/.
/*E R I N N E R E R U N G E S T Ü T Z T: N U R K O N T A K T P E R S O N E N /.
/***************************************************************************************************/.

DO IF (F3_JAG =1 & VAR121=1).
COMPUTE F3_JAG_KT = 1.
ELSE IF (F3_JAG ~=1 & VAR121 =1).
COMPUTE F3_JAG_KT =2.
ELSE IF (F3_JAG =1 & VAR121 ~=1).
COMPUTE F3_JAG_KT =3.
ELSE .
COMPUTE F3_JAG_KT =4.
END IF.
EXECUTE.

DO IF (F3_WAR =1 & VAR175=1).
COMPUTE F3_JAG_KT = 1.
ELSE IF (F3_WAR ~=1 & VAR175 =1).
COMPUTE F3_WAR_KT =2.
ELSE IF (F3_WAR =1 & VAR175 ~=1).
COMPUTE F3_WAR_KT =3.
ELSE .
COMPUTE F3_WAR_KT =4.
END IF.
EXECUTE.

DO IF (F3_BENJ =1 & VAR79=1).
COMPUTE F3_BENJ_KT = 1.
ELSE IF (F3_BENJ ~=1 & VAR79=1).
COMPUTE F3_BENJ_KT =2.
ELSE IF (F3_BENJ =1 & VAR79 ~=1).
COMPUTE F3_BENJ_KT =3.
ELSE .
COMPUTE F3_BENJ_KT =4.
END IF.
EXECUTE.

DO IF (F3_LEVI =1 & VAR134=1).
COMPUTE F3_LEVI_KT = 1.
ELSE IF (F3_LEVI ~=1 & VAR134 =1).
COMPUTE F3_LEVI_KT =2.
ELSE IF (F3_LEVI =1 & VAR134 ~=1).
COMPUTE F3_LEVI_KT =3.
ELSE .
COMPUTE F3_LEVI_KT =4.
END IF.
EXECUTE.

DO IF (F3_NORTH =1 & VAR167=1).
COMPUTE F3_NORTH_KT = 1.
ELSE IF (F3_NORTH ~=1 & VAR167 =1).
COMPUTE F3_NORTH_KT =2.
ELSE IF (F3_NORTH =1 & VAR167 ~=1).
COMPUTE F3_NORTH_KT =3.
ELSE .
COMPUTE F3_NORTH_KT =4.
END IF.
EXECUTE.

DO IF (F3_REDB =1 & VAR156=1).
COMPUTE F3_REDB_KT = 1.
ELSE IF (F3_REDB ~=1 & VAR156 =1).
COMPUTE F3_REDB_KT =2.
ELSE IF (F3_REDB =1 & VAR156 ~=1).
COMPUTE F3_REDB_KT =3.
ELSE .
COMPUTE F3_REDB_KT =4.
END IF.
EXECUTE.


DO IF (F3_RIT =1 & VAR157=1).
COMPUTE F3_RIT_KT = 1.
ELSE IF (F3_RIT ~=1 & VAR157 =1).
COMPUTE F3_RIT_KT =2.
ELSE IF (F3_RIT =1 & VAR157 ~=1).
COMPUTE F3_RIT_KT =3.
ELSE .
COMPUTE F3_RIT_KT =4.
END IF.
EXECUTE.


DO IF (F3_DB =1 & VAR96=1).
COMPUTE F3_DB_KT = 1.
ELSE IF (F3_DB ~=1 & VAR96 =1).
COMPUTE F3_DB_KT =2.
ELSE IF (F3_DB =1 & VAR96 ~=1).
COMPUTE F3_DB_KT =3.
ELSE .
COMPUTE F3_DB_KT =4.
END IF.
EXECUTE.


DO IF (F3_LENOV =1 & VAR133=1).
COMPUTE F3_LENOV_KT = 1.
ELSE IF (F3_LENOV ~=1 & VAR133 =1).
COMPUTE F3_LENOV_KT =2.
ELSE IF (F3_LENOV =1 & VAR133 ~=1).
COMPUTE F3_LENOV_KT =3.
ELSE .
COMPUTE F3_LENOV_KT =4.
END IF.
EXECUTE.

DO IF (F3_VOD =1 & VAR174=1).
COMPUTE F3_VOD_KT = 1.
ELSE IF (F3_VOD ~=1 & VAR174 =1).
COMPUTE F3_VOD_KT =2.
ELSE IF (F3_VOD =1 & VAR174 ~=1).
COMPUTE F3_VOD_KT =3.
ELSE .
COMPUTE F3_VOD_KT =4.
END IF.
EXECUTE.

DO IF (F3_WDR2 =1 & VAR176=1).
COMPUTE F3_WDR2_KT = 1.
ELSE IF (F3_WDR2 ~=1 & VAR176 =1).
COMPUTE F3_WDR2_KT =2.
ELSE IF (F3_WDR2 =1 & VAR176 ~=1).
COMPUTE F3_WDR2_KT =3.
ELSE .
COMPUTE F3_WDR2_KT =4.
END IF.
EXECUTE.

DO IF (F3_BRIL = 1 & VAR82 = 1).
COMPUTE F3_BRIL_KT = 1.
ELSE IF (F3_BRIL ~=1 & VAR82 = 1).
COMPUTE F3_BRIL_KT = 2.
ELSE IF (F3_BRIL = 1 & VAR82 ~= 1).
COMPUTE F3_BRIL_KT = 3.
ELSE .
COMPUTE F3_BRIL_KT = 4.
END IF.
EXECUTE.

DO IF (F3_BZGA = 1 & VAR83 = 1).
COMPUTE F3_BZGA_KT = 1.
ELSE IF (F3_BZGA ~=1 & VAR83 = 1).
COMPUTE F3_BZGA_KT = 2.
ELSE IF (F3_BZGA = 1 & VAR83 ~= 1).
COMPUTE F3_BZGA_KT = 3.
ELSE .
COMPUTE F3_BZGA_KT = 4.
END IF.
EXECUTE.

DO IF (F3_CHARI = 1 & VAR86 = 1).
COMPUTE F3_CHARI_KT = 1.
ELSE IF (F3_CHARI ~=1 & VAR86 = 1).
COMPUTE F3_CHARI_KT = 2.
ELSE IF (F3_CHARI = 1 & VAR86 ~= 1).
COMPUTE F3_CHARI_KT = 3.
ELSE .
COMPUTE F3_CHARI_KT = 4.
END IF.
EXECUTE.

DO IF (F3_CHIO = 1 & VAR87 = 1).
COMPUTE F3_CHIO_KT = 1.
ELSE IF (F3_CHIO ~=1 & VAR87 = 1).
COMPUTE F3_CHIO_KT = 2.
ELSE IF (F3_CHIO = 1 & VAR87 ~= 1).
COMPUTE F3_CHIO_KT = 3.
ELSE .
COMPUTE F3_CHIO_KT = 4.
END IF.
EXECUTE.

DO IF (F3_DEUS = 1 & VAR100 = 1).
COMPUTE F3_DEUS_KT = 1.
ELSE IF (F3_DEUS ~=1 & VAR100 = 1).
COMPUTE F3_DEUS_KT = 2.
ELSE IF (F3_DEUS = 1 & VAR100 ~= 1).
COMPUTE F3_DEUS_KT = 3.
ELSE .
COMPUTE F3_DEUS_KT = 4.
END IF.
EXECUTE.

DO IF (F3_FSTA = 1 & VAR104 = 1).
COMPUTE F3_FSTA_KT = 1.
ELSE IF (F3_FSTA ~=1 & VAR104 = 1).
COMPUTE F3_FSTA_KT = 2.
ELSE IF (F3_FSTA = 1 & VAR104 ~= 1).
COMPUTE F3_FSTA_KT = 3.
ELSE .
COMPUTE F3_FSTA_KT = 4.
END IF.
EXECUTE.

DO IF (F3_KINONW = 1 & VAR128 = 1).
COMPUTE F3_KINONW_KT = 1.
ELSE IF (F3_KINONW ~=1 & VAR128 = 1).
COMPUTE F3_KINONW_KT = 2.
ELSE IF (F3_KINONW = 1 & VAR128 ~= 1).
COMPUTE F3_KINONW_KT = 3.
ELSE .
COMPUTE F3_KINONW_KT = 4.
END IF.
EXECUTE.

DO IF (F3_COR = 1 & VAR131 = 1).
COMPUTE F3_COR_KT = 1.
ELSE IF (F3_COR ~=1 & VAR131 = 1).
COMPUTE F3_COR_KT = 2.
ELSE IF (F3_COR = 1 & VAR131 ~= 1).
COMPUTE F3_COR_KT = 3.
ELSE .
COMPUTE F3_COR_KT = 4.
END IF.
EXECUTE.

DO IF (F3_MAG = 1 & VAR132 = 1).
COMPUTE F3_MAG_KT = 1.
ELSE IF (F3_MAG ~=1 & VAR132 = 1).
COMPUTE F3_MAG_KT = 2.
ELSE IF (F3_MAG = 1 & VAR132 ~= 1).
COMPUTE F3_MAG_KT = 3.
ELSE .
COMPUTE F3_MAG_KT = 4.
END IF.
EXECUTE.

DO IF (F3_MCC = 1 & VAR138 = 1).
COMPUTE F3_MCC_KT = 1.
ELSE IF (F3_MCC ~=1 & VAR138 = 1).
COMPUTE F3_MCC_KT = 2.
ELSE IF (F3_MCC = 1 & VAR138 ~= 1).
COMPUTE F3_MCC_KT = 3.
ELSE .
COMPUTE F3_MCC_KT = 4.
END IF.
EXECUTE.

DO IF (F3_MOE = 1 & VAR141 = 1).
COMPUTE F3_MOE_KT = 1.
ELSE IF (F3_MOE ~=1 & VAR141 = 1).
COMPUTE F3_MOE_KT = 2.
ELSE IF (F3_MOE = 1 & VAR141 ~= 1).
COMPUTE F3_MOE_KT = 3.
ELSE .
COMPUTE F3_MOE_KT = 4.
END IF.
EXECUTE.

DO IF (F3_PHAN = 1 & VAR149 = 1).
COMPUTE F3_PHAN_KT = 1.
ELSE IF (F3_PHAN ~=1 & VAR149 = 1).
COMPUTE F3_PHAN_KT = 2.
ELSE IF (F3_PHAN = 1 & VAR149 ~= 1).
COMPUTE F3_PHAN_KT = 3.
ELSE .
COMPUTE F3_PHAN_KT = 4.
END IF.
EXECUTE.

DO IF (F3_RADIO = 1 & VAR151 = 1).
COMPUTE F3_RADIO_KT = 1.
ELSE IF (F3_RADIO ~=1 & VAR151 = 1).
COMPUTE F3_RADIO_KT = 2.
ELSE IF (F3_RADIO = 1 & VAR151 ~= 1).
COMPUTE F3_RADIO_KT = 3.
ELSE .
COMPUTE F3_RADIO_KT = 4.
END IF.
EXECUTE.

DO IF (F3_RIVE = 1 & VAR158 = 1).
COMPUTE F3_RIVE_KT = 1.
ELSE IF (F3_RIVE ~=1 & VAR158 = 1).
COMPUTE F3_RIVE_KT = 2.
ELSE IF (F3_RIVE = 1 & VAR158 ~= 1).
COMPUTE F3_RIVE_KT = 3.
ELSE .
COMPUTE F3_RIVE_KT = 4.
END IF.
EXECUTE.

DO IF (F3_TEL5 = 1 & VAR164 = 1).
COMPUTE F3_TEL5_KT = 1.
ELSE IF (F3_TEL5 ~=1 & VAR164 = 1).
COMPUTE F3_TEL5_KT = 2.
ELSE IF (F3_TEL5 = 1 & VAR164 ~= 1).
COMPUTE F3_TEL5_KT = 3.
ELSE .
COMPUTE F3_TEL5_KT = 4.
END IF.
EXECUTE.


VALUE LABELS F3_JAG_KT TO F3_TEL5_KT
1 'gelaufen und erinnert'
2 'gelaufen und nicht erinnert'
3 'Fehlnennung'
4 'nicht gelaufen und nicht genannt'.
EXECUTE.

FORMATS F3_JAG_KT TO F3_TEL5_KT (F8.0).
EXECUTE.
Regina85
 
Beiträge: 7
Registriert: Mo 10. Okt 2011, 10:53
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Variablenberechnung einzeln oder hintereinander?

Beitragvon Regina85 » Di 11. Okt 2011, 14:17

-huch! ich sehe gerade, dass sowhl in der ersten als auch in der zweiten Variablenberechnung (F3_JAG und F3_WAR) auf F3_JAG_KT verwiesen wird. Im zweiten Fall ist dies natürlich FALSCH. Vielleicht ist das schon der Grund, peinlich... :oops:

Regina
Regina85
 
Beiträge: 7
Registriert: Mo 10. Okt 2011, 10:53
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Variablenberechnung einzeln oder hintereinander?

Beitragvon STATWORX » Di 11. Okt 2011, 20:23

Hallo Regina,

kein Thema...im Eifer des Gefechts kann da schnell passieren :)
Lass die Syntax doch noch einmal laufen und gib uns Feedback, ob alles funktioniert hat.

VG
STATWORX
STATWORX
Administrator
 
Beiträge: 87
Registriert: So 25. Sep 2011, 16:21
Danke gegeben: 0
Danke bekommen: 6 mal in 6 Posts

Re: Variablenberechnung einzeln oder hintereinander?

Beitragvon Regina85 » Mi 12. Okt 2011, 17:11

Hallo Statworx,

jetzt funktioniert alles einwandfrei. Sorry für den Wirbel, aber ich habe das tatsächlich nicht mehr gesehen :-). Immerhin weiß ich jetzt, dass am Stück bzw. einzeln durchlaufen lassen keinen Unterschied machen darf, sonst ist was falsch.

Eine Frage dazu noch: Bei diesen DO..IF-Befehlen werden immer die fehlenden Werte komplett unbeachtet belassen. Das bedeutet, wenn ich z.B. sage:

DO IF (ANGABE1 =1 & MOTIV1=1).
COMPUTE MOTIV_NEU1 = 1.
ELSE IF (ANGABE1 ~=1 & MOTIV1 =1).
COMPUTE MOTIV_NEU1 =2.
ELSE IF (ANGABE1 =1 & MOTIV1 ~=1).
COMPUTE MOTIV_NEU1 =3.
ELSE .
COMPUTE MOTIV_NEU1 =4.
END IF.
EXECUTE.

und z.B. ANGABE1 ist ein fehlender Wert, errechnet SPSS nicht "4" für MOTIV_NEU1, obwohl doch "ELSE." eigentlich heißt, dass diese Berechnung ausgeführt werden soll, wenn ALLE anderen Bedingungen nicht erfüllt sind. Das wäre doch der Fall, wenn ANGABE1 bei einem Befragten nicht definiert ist. Statt dessen bekomme ich als Ergebnis in MOTIV_NEU1 in diesem Fall auch einen fehlenden Wert.

Wie kann ich denn erreichen, dass ALLE Fälle in der Datei eine Kodierung zwischen 1 und 4 haben und nie fehlende Werte auftreten?

Ich kann das auch noch mal als separates Thema posten, wenn das hier nicht hingehört.

Danke und LG,
Regina.
Regina85
 
Beiträge: 7
Registriert: Mo 10. Okt 2011, 10:53
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Variablenberechnung einzeln oder hintereinander?

Beitragvon STATWORX » Do 13. Okt 2011, 22:17

Hallo Regina,

das musst Du explizit programmieren, z.B. so (Beispiel):

Code: Alles auswählen
DO IF (ANGABE1 =1 & MOTIV1=1) | (ISMISSING(ANGABE1) & MOTIV1=1).
COMPUTE MOTIV_NEU1 = 1.
END IF.
EXECUTE.


VG
STATWORX
STATWORX
Administrator
 
Beiträge: 87
Registriert: So 25. Sep 2011, 16:21
Danke gegeben: 0
Danke bekommen: 6 mal in 6 Posts

Re: Variablenberechnung einzeln oder hintereinander?

Beitragvon Regina85 » Do 20. Okt 2011, 11:39

...zwar spät, aber dennoch vielen Dank Statworx für Deine hilfreichen Anmerkungen!

Bis bald und LG von
Regina
Regina85
 
Beiträge: 7
Registriert: Mo 10. Okt 2011, 10:53
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post


Zurück zu SPSS Syntax

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste

cron