wieder mal: Fehlende Werte
-
- Beiträge: 27
- Registriert: 07.08.2007, 13:00
wieder mal: Fehlende Werte
hallo an alle,
trotz suche hab ich immer noch keine passende antwort gefunden, wie spss mit fehlenden werten umgeht. evtl. kanns mir ja jemand erklären ?
Beispiel:
- Datendatei mit den 2 Var a und b und nur einem Fall
- Werte a=1; b=2
- neue Var c=a+b (also c=3; soweit so gut)
- ich ersetze den wert in var a durch . und bilde wieder c; (nun ist c=. und nicht gleich 2; wieso ist das so ?)
- ich ersetze den wert in var a durch 99 (und definiere 99 als fehlenden wert) und bilde wieder c; (nun ist c=. und nicht gleich 2; wieso ist das so ?)
zu hülfe bitte
trotz suche hab ich immer noch keine passende antwort gefunden, wie spss mit fehlenden werten umgeht. evtl. kanns mir ja jemand erklären ?
Beispiel:
- Datendatei mit den 2 Var a und b und nur einem Fall
- Werte a=1; b=2
- neue Var c=a+b (also c=3; soweit so gut)
- ich ersetze den wert in var a durch . und bilde wieder c; (nun ist c=. und nicht gleich 2; wieso ist das so ?)
- ich ersetze den wert in var a durch 99 (und definiere 99 als fehlenden wert) und bilde wieder c; (nun ist c=. und nicht gleich 2; wieso ist das so ?)
zu hülfe bitte
-
- Beiträge: 939
- Registriert: 13.05.2008, 10:52
hallo,
weil . nicht das gleiche wie null bedeutet. . bedeutet "fehlende antwort, ausprägung unbekannt" und null bedeutet "null-ausprägung wie z.b. in 0 cm".
das gleiche, wenn man einen bestimmten wert z.b. 99 als fehlend definiert.
was du aber machen kannst: statt als c = a + b bildest du c so.
c = sum.1(a,b)
.1 gibt die anzahl der werte von a, b (bzw. den variablen in klammer) an, die vorhanden sein müssen, um die funktion (hier: summe) auszuführen. obwohl man aus nur einem summanden keine wirkliche summe bilden kann, führt dies zum von dir gewünschten ergebnis.
weil . nicht das gleiche wie null bedeutet. . bedeutet "fehlende antwort, ausprägung unbekannt" und null bedeutet "null-ausprägung wie z.b. in 0 cm".
das gleiche, wenn man einen bestimmten wert z.b. 99 als fehlend definiert.
was du aber machen kannst: statt als c = a + b bildest du c so.
c = sum.1(a,b)
.1 gibt die anzahl der werte von a, b (bzw. den variablen in klammer) an, die vorhanden sein müssen, um die funktion (hier: summe) auszuführen. obwohl man aus nur einem summanden keine wirkliche summe bilden kann, führt dies zum von dir gewünschten ergebnis.
-
- Beiträge: 27
- Registriert: 07.08.2007, 13:00
hallo KarinJ,
danke für deine Antwort, trotzdem ist mir nicht alles klar. ich verlasse mal mein beispiel und werde etwas konkreter:
also; ich habe einen datensatz, in dem einige zellen einen "." enhalten. dies bedeutet also, dass dort kein wert angegeben wurde (aus welchen gründen auch immer). wenn ich nun weitere berechnungen (neue var. usw.) durchführe, bekomme ich im ergebniss oft ein ".", nämlich immer dann wenn eine zelle mit fehlendem wert in die berechnung eingeht.
wie kann ich das umgehen ? dein beispiel mit c = sum.1(a,b) funktioniert zwar, aber in meiner datei will ich ja nicht nur summen bilden.
kann ich einfach vorher alle "." durch 0 ersetzen ?
danke für deine Antwort, trotzdem ist mir nicht alles klar. ich verlasse mal mein beispiel und werde etwas konkreter:
also; ich habe einen datensatz, in dem einige zellen einen "." enhalten. dies bedeutet also, dass dort kein wert angegeben wurde (aus welchen gründen auch immer). wenn ich nun weitere berechnungen (neue var. usw.) durchführe, bekomme ich im ergebniss oft ein ".", nämlich immer dann wenn eine zelle mit fehlendem wert in die berechnung eingeht.
wie kann ich das umgehen ? dein beispiel mit c = sum.1(a,b) funktioniert zwar, aber in meiner datei will ich ja nicht nur summen bilden.
kann ich einfach vorher alle "." durch 0 ersetzen ?
-
- Moderator
- Beiträge: 304
- Registriert: 17.01.2006, 19:20
Die Frage ist doch vor allem, welchen inhaltlichen Sinn Berechnungen mit fehlenden Werten im jeweiligen Fall machen.
Wenn eine Person zu einer Frage / Variable keine Antwort gegeben hat und diese (nicht vorhandene) Antwort dann mit anderen Antworten verrechnet oder in Beziehung gesetzt wird, ist das inhaltlich prinzipiell schon mal fragwürdig.
Von daher macht es schon Sinn, das solche Berechnungen in einem ersten Schritt standardmäßig auf "fehlend" gesetzt werden. Das Programm weiss ja nicht, was Du vorhast.
Gelegentlich werden fehlende Werte dann einfach durch den jeweiligen Mittelwert ersetzt, dies kann in der Masse dann zu tendenziell "konservativen" Ergebnissen in der Untersuchung führen.
Wenn Du die Werte schon loswerden willst, solltest du ggf. von einer inhaltlichen Begründung dafür ausgehen und Dir dann etwas überlegen. Hier ist dann einfach etwas Logik und Argumentation gefragt -> Überleg Dir was es inhaltlich aussagt, wenn Du . durch 0 ersetzt und ob das für Dich in Frage kommt.
Wenn eine Person zu einer Frage / Variable keine Antwort gegeben hat und diese (nicht vorhandene) Antwort dann mit anderen Antworten verrechnet oder in Beziehung gesetzt wird, ist das inhaltlich prinzipiell schon mal fragwürdig.
Von daher macht es schon Sinn, das solche Berechnungen in einem ersten Schritt standardmäßig auf "fehlend" gesetzt werden. Das Programm weiss ja nicht, was Du vorhast.
Gelegentlich werden fehlende Werte dann einfach durch den jeweiligen Mittelwert ersetzt, dies kann in der Masse dann zu tendenziell "konservativen" Ergebnissen in der Untersuchung führen.
Wenn Du die Werte schon loswerden willst, solltest du ggf. von einer inhaltlichen Begründung dafür ausgehen und Dir dann etwas überlegen. Hier ist dann einfach etwas Logik und Argumentation gefragt -> Überleg Dir was es inhaltlich aussagt, wenn Du . durch 0 ersetzt und ob das für Dich in Frage kommt.
Literatur?
Bücher zum Thema SPSS und Statistik (Amazon)
Bücher zum Thema SPSS und Statistik (Amazon)
-
- Beiträge: 939
- Registriert: 13.05.2008, 10:52
nein, . durch 0 ersetzten solltest du nicht, weil wie gesagt:
außerdem kann man fehlende werte ersetzen z.b. durch den individuellen mittelwert oder durch anders geschätzte werte.
das mit dem . funktioniert auch für mean (mittelwert).weil . nicht das gleiche wie null bedeutet. . bedeutet "fehlende antwort, ausprägung unbekannt" und null bedeutet "null-ausprägung wie z.b. in 0 cm".
außerdem kann man fehlende werte ersetzen z.b. durch den individuellen mittelwert oder durch anders geschätzte werte.
-
- Beiträge: 27
- Registriert: 07.08.2007, 13:00
ich verstehe durchaus worauf ihr hinaus wollt, in meinem fall macht das ersetzen von . durch 0 durchaus sinn (denke ich).
ich versuch noch mal ein beispiel, dass meiner datenstrucktur ähnelt:
Generelle Frage: wieviel gibt haushalt xy für tierfutter aus ?
Var. die abgefragt werden um dies zu beantworten:
Wieviele Hunde hat HH XY ?
Wieviele Katzen hat HH XY ?
Wieviele Vögel hat HH XY ?
...
wenn nun jemand keine hunde hat, und nichts ausfüllt, ist also an der entsprechenden stelle ein ".", der sinngemäß durch eine 0 ersetzt werden könnte. Oder nicht ?
mit den daten soll dann natürlich noch weiter gerechnet werden, wenn aber alle berechnungen aufgrund der fehlenden werte in einem "." enden hat das irgenwie gar keine sinn. Oder doch ?
[es wäre natürlich schön wenn hh xy dann gleich 0 angibt, aber der datensatz liegt mir bereits vor, so dass daran nichts mehr zu ändern ist]
ich versuch noch mal ein beispiel, dass meiner datenstrucktur ähnelt:
Generelle Frage: wieviel gibt haushalt xy für tierfutter aus ?
Var. die abgefragt werden um dies zu beantworten:
Wieviele Hunde hat HH XY ?
Wieviele Katzen hat HH XY ?
Wieviele Vögel hat HH XY ?
...
wenn nun jemand keine hunde hat, und nichts ausfüllt, ist also an der entsprechenden stelle ein ".", der sinngemäß durch eine 0 ersetzt werden könnte. Oder nicht ?
mit den daten soll dann natürlich noch weiter gerechnet werden, wenn aber alle berechnungen aufgrund der fehlenden werte in einem "." enden hat das irgenwie gar keine sinn. Oder doch ?
[es wäre natürlich schön wenn hh xy dann gleich 0 angibt, aber der datensatz liegt mir bereits vor, so dass daran nichts mehr zu ändern ist]
-
- Beiträge: 939
- Registriert: 13.05.2008, 10:52
-
- Beiträge: 939
- Registriert: 13.05.2008, 10:52
transformieren, umcodieren - ich würde in eine andere variable umcodieren (man weiss ja nie, ob man die rohdaten nochmal braucht). dann bei "werte" auf der linken seite fehlend anklicken und auf der rechten seite 0 angeben, dann hinzufügen. es müsste so etwas erscheinen wie sysmis --> 0. dann ok und nochmal ok.
mit einfügen erhält man die syntax:
recode
variable (sysmis -> 0) into neu .
execute.
mit einfügen erhält man die syntax:
recode
variable (sysmis -> 0) into neu .
execute.
-
- Beiträge: 27
- Registriert: 07.08.2007, 13:00
erstmal dankeschön, für die hilfe.
umcodieren ist warscheinlich die beste lösung, allerdings geht es um einen datensatz mit ca. 200 var. , das wird ganz schön mühsam.
deshalb nochmal die frage ob man nicht im gesammten datensatz die "." duchh 0 ersetzen kann ? ich könnte ja den datensatz im anschluss unter einem anderen namen speichern, und so auch die rohdaten erhalten.
umcodieren ist warscheinlich die beste lösung, allerdings geht es um einen datensatz mit ca. 200 var. , das wird ganz schön mühsam.
deshalb nochmal die frage ob man nicht im gesammten datensatz die "." duchh 0 ersetzen kann ? ich könnte ja den datensatz im anschluss unter einem anderen namen speichern, und so auch die rohdaten erhalten.
-
- Beiträge: 939
- Registriert: 13.05.2008, 10:52
man kann auch in der gleichen variablen ersetzen, dann spart man sich die eingabe eines neuen namens. wahrscheinlich kann man nicht alle 200 variablen gleichzeitig ins feld klicken, aber auf 4-5 mal müsste es zu machen sein. die umcodierungsanweisung der werte bleibt jeweils stehen. einen befehl zum ersetzen, ohne die namen anzugeben, kenne ich leider nicht.
-
- Beiträge: 27
- Registriert: 07.08.2007, 13:00
hallo, nochmals danke;
mit dem befehl:
RECODE Var1 Var2 Var 3 (SYSMIS=0).
EXECUTE .
hats dann doch geklappt, (man kann auch beliebig viele Var. einfügen).
ich hab auch schon ein bischen rumprobiert, alle meine probleme scheinen dennoch nicht gelöst, aber da frag ich dann später noch mal hier im forum nach.
mit dem befehl:
RECODE Var1 Var2 Var 3 (SYSMIS=0).
EXECUTE .
hats dann doch geklappt, (man kann auch beliebig viele Var. einfügen).
ich hab auch schon ein bischen rumprobiert, alle meine probleme scheinen dennoch nicht gelöst, aber da frag ich dann später noch mal hier im forum nach.