DO IF ELSE Befehl

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
sarkastomat@mail.de
Beiträge: 6
Registriert: 06.12.2020, 20:36

DO IF ELSE Befehl

Beitrag von sarkastomat@mail.de »

Hallo zusammen!
Ich habe eine Problem mit der Syntax...nur leider weiß ich nicht warum.

Dieses sollte logisch wie folgt lauten:
COMPUTE bsiG1_t1 = 0.
DO IF (bsiM1_t1 >= 7) bsiG1_t1 = 999.
ELSE bsiG1_t1 = bsiS1_t1 / (7 - bsiM1_t1).
END IF.
EXECUTE.

Ich erhalte daraufhin aber die Fehlermeldung:
88 DO IF In einem Befehl DO IF folgt nach dem logischen Ausdruck irrelevanter Text.
89 ELSE Der Befehl ELSE folgt nicht auf einen nicht geschlossenen Befehl DO IF. Möglicherweise wurde der Befehl DO IF aufgrund eines Fehlers nicht erkannt. Use the level-of-control shown to the left of the SPSS Statistics commands to determine the range of LOOPs and DO IFs.
90 END IF Der Befehl folgt nicht auf einen nicht geschlossenen Befehl DO IF. Möglicherweise wurde der Befehl DO IF aufgrund eines Fehlers nicht erkannt. Use the level-of-control shown to the left of the SPSS Statistics commands to determine the range of LOOPs and DO IFs.

Und zwar egal wie ich es wende und drehe mit Do IF/ ELSE IF/ ELSE, ich komme nicht weiter. Was mache ich falsch? Habt ihr eine Idee?
Liebe Grüße!

Hintergrund:
Ich erhalte System Missing Values, da eine Division durch 0 nicht möglich ist, bei der einfachen Gleichung
COMPUTE bsiG1_t1=bsiS1_t1 / (6 - bsiM1_t1).
EXECUTE.
Und der Divisor wird eben 0 sobald bsiM1 gleich 7 ist. Da ich keine SYSMIS möchte, sondern nur fehlende Werte, die Idee mit dem IF-Befehl.
dutchie
Beiträge: 2767
Registriert: 01.02.2018, 10:45

Re: DO IF ELSE Befehl

Beitrag von dutchie »

Hallo

Das randaddeln von Fällen ist dir zu heiß und dann bastelst du sowas, :shock: :wink:

SYSMIS ist ein fehlender Wert, du meint fehlend als Zahl (999)?
Ich weiß nicht genau was du vorhast, aber mach das schrittweise!
und nicht alles auf einmal!

bsiGi_t1 existiert noch gar nicht und soll erzeugt werden.

z.B codiere erst bsiM1_t1 um in kleiner und größer 7

RECODE
bsiM1_t1 (0 thru 6.999=1) (ELSE=999) INTO bsiM1_t1cod .
EXECUTE .

dann definierts du 999 als Fehler.
Wenn du damit bsiG1_t1 ausrechnest bekommt der Wert fehlend, wenn bsiM1_t1 fehlt.
Dann kannst du SYSMIS in 999 umcodieren.

Wann und warum ist bsiG1_t1 = 0?

gruß
dutchie
sarkastomat@mail.de
Beiträge: 6
Registriert: 06.12.2020, 20:36

Re: DO IF ELSE Befehl

Beitrag von sarkastomat@mail.de »

Hallo :)
Bei den Fällen geht es um VPN-Daten, wichtige Daten :wink:
Das Syntax erstellen/ schreiben ist ja eher ein "spielen" mit den Daten, da kann nichts verloren gehen (insofern man eine Rohdaten-Sicherung hat :wink: )

Deine Antwort trifft mein Problem nicht ganz genau.
Ich beschreibe einmal ausführlicher:
Ich habe Items bsi1_t1 bsi2_t1 etc. bis bsi53_t1, diverse dieser ergeben Skalen bsiS1_t1 bsiS2_t1 etc.
Fehlende Items, im Sinne von VPN nicht ausgefüllt, haben den Wert 999 oder 666 zugewiesen bekommen (auch so definiert in der Variablenansicht).
Der Wert bsiM1_t1 zählt diese fehlenden Werte pro Skala - User-Missings für Skala 1, Skala 2 usw.
Dann soll der Skalenmittelwert unter Berücksichtigung der User-Missings berechnet werden, MW pro Skala also:
COMPUTE bsiG1_t1=bsiS1_t1 / (6 - bsiM1_t1).
Dabei ergibt sich das Problem:
Ist die Anzahl der User-Missing Values 6, dann steht Untem im Bruch, im Nenner 6-6 = 0
Und SPSS gibt mir aus: System Missing Values, da eine Division durch 0 nicht möglich ist.
Rechne ich mit den Daten nun wird die VPN wegen SYSMIS ausgeschlossen, obwohl sie eventuell auf anderen Skalen sehr wohl Angaben gemacht hat und einen MW besitzt. Das möchte ich ausschließen, eben durch die Definition eines solchen Falls in 999 (fehlende Werte).

Ich hoffe nun ist die Ausgangslage klarer … es ist schon etwas kompliziert; vielleicht denke ich auch um zu viele Ecken?

Und zu deiner Frage noch: ich erstelle die Variable zuerst und gebe ihr den Wert 0 (COMPUTE bsiG1_t1 = 0.) da sie vorab noch gar nicht im Datensatz existent ist. Eventuell unnütz?!?

Liebe Grüße!
dutchie
Beiträge: 2767
Registriert: 01.02.2018, 10:45

Re: DO IF ELSE Befehl

Beitrag von dutchie »

Hallo,

wenn du fehlende Werte hast und einen Mittelwert berechnen willst,
deiner ürsprüglichen Formel/Syntax war das nicht anzusehen,
machst du das über mean(v1,v2,v3...)
du kannst einstellen wieviel Werte minimum fehlend sein dürfen

COMPUTE eee = mean(V1,V2,V3) .
EXECUTE .
Dann werden nur die gültigen Werte in den M einbezogen.
es wird aber auch gerechnet, wenn nur ein gültiger da ist!

oder so mit der .3
COMPUTE ee2 = mean.3(V1,V2,V3,V4,V5,V6) .
EXECUTE .
minimum 3 gültige Werte.

Es ist völlig eagl ob da "." oder "999" steht, das ist gleichwerig
wenn 999 unter fehlend ausgeschlossen wird.
sarkastomat@mail.de hat geschrieben:
09.12.2020, 08:51
Eventuell unnütz?!?
so gar gefährlich, es ist nicht immer klar, ob SPSS die komplette Variable ersetzt, oder
nur einzelne Fälle überschreibt.

gruß
dutchie
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