Der RECODE
-Befehl wird verwendet, um einige oder alle Werte einer Variablen zu ändern. Die neuen Werte können in derselben oder in einer neuen Variablen gespeichert werden.
Einfaches Beispiel:
RECODE var1 var2 (1,2 = 1) (3,4 = 2).
Komplexeres Beispiel:
RECODE var1 (1,2 = 1) (3 bis 8 = 2) (missing = 99) (else = copy)
INTO var1new.
Allgemeines
Angenommen, wir haben die Variable famimpor mit den Werten 1, 2, 3 und 4, die misst, wie wichtig es für den Befragten ist, eine Familie zu haben.
RECODE famimpor (4=3).
Dadurch werden alle Vorkommen des Wertes 4 in den Wert 3 geändert. Der ursprüngliche Wert 3 bleibt unverändert. (Wenn Sie Wertelabels haben, sollten Sie diese jetzt vielleicht entsprechend ändern). Alle anderen Werte bleiben ebenfalls unverändert.
RECODE famimpor (1,2 =1) (3,4 = 2).
Damit wird eine dichotome Variable mit einem Cut-off-Punkt zwischen 2 und 3 erzeugt.
RECODE famimpor (1=4) (2=3) (3=2) (4=1).
Damit wird die Reihenfolge der Werte umgekehrt. Beachten Sie, dass dies einfacher mit dem Befehl COMPUTE
COMPUTE famimpor = 5 - famimpor.
) erreicht werden kann. Dies kann hilfreich sein, wenn es viele Kategorien gibt.
Erstellen neuer Variablen
Ein Problem ist, dass alle obigen Beispiele die ursprünglichen Werte der Variablen ändern. Das sollten Sie nur dann tun, wenn Sie entweder die ursprünglichen Werte aus den neuen rekonstruieren können (das wäre nur im letzten Beispiel möglich!) oder wenn Sie sich verdammt sicher sind, dass Sie irgendwo eine gültige Kopie Ihres Datensatzes haben. Glücklicherweise können Sie neue Variablen mit dem Befehl RECODE
erstellen, indem Sie INTO NEWVAR
hinzufügen. Siehe die folgenden Beispiele.
RECODE famimpor (1,2 =1) (3,4 = 2) INTO famimpod.
Dadurch wird eine dichotome Variable mit einem Cut-Off-Punkt zwischen 2 und 3 erstellt. Die alte Variable bleibt jedoch erhalten, und die dichotome Variable wird dem Datensatz mit dem Namen famimpod hinzugefügt (wobei „D“ anzeigt, dass es sich um eine dichotome Variable handelt. Ich verwende solche memotechnischen Hilfsmittel recht häufig, aber das müssen Sie natürlich nicht.)
Beachten Sie jedoch, dass Sie einige Vorsichtsmaßnahmen ergreifen müssen, wenn Sie eine neue Variable EINSCHREIBEN. In diesem Fall müssen Sie sich vergewissern, dass die neue Variable alle gültigen Werte hat, die Sie ihr zuweisen wollen. Wenn der Befehl RECODE
nur einen Teil der Werte benennt, werden alle anderen Werte als fehlende Systemwerte behandelt. Es gibt jedoch eine einfache Möglichkeit, dieses Problem zu lösen.
FALSCH: RECODE famimpor (4=3) INTO famimpon.
Dies würde alle Vorkommen von Wert 4 in Wert 3 ändern. Alle anderen Werte würden jedoch als fehlendes System behandelt. Hier ist der bessere Weg:
RECODE famimpor (4=3) (ELSE=COPY) INTO famimpon.
Damit werden alle Vorkommen des Wertes 4 auf den Wert 3 geändert, und alle anderen Werte werden in die neue Variable kopiert. Sie können natürlich so viele explizite Umkodierungen vornehmen, wie Sie möchten, und den Rest mit ELSE=COPY behandeln.
Der ELSE-Teil des RECODE-Befehls ist nicht auf den soeben erläuterten „COPY“-Fall beschränkt. Sie können ihn auch mit expliziten Werten verwenden, wie im folgenden Beispiel:
RECODE famimpor (4,3=2) (ELSE=1) INTO famimpor.
Ein Problem bei RECODE INTO ist jedoch, dass Variablen- und Wertelabels nicht automatisch erstellt werden (wie sollten sie auch?). Vergessen Sie also nicht, die neue Variable zu beschriften.
Mehrere Variablen
können in einer RECODE
-Anweisung angesprochen werden, sofern alle Variablen in gleicher Weise betroffen sein sollen, wie im folgenden Beispiel.
RECODE famimpor workimpo chldimpo (4,3=2) (ELSE=1).
Wenn Sie jedoch RECODE
diese Variablen in neue Variablen einfügen wollen, ist für jede Variable eine eigene RECODE
Befehlszeile notwendig.
Behandlung von fehlenden Werten
Fehlende Werte können mit den Schlüsselwörtern „sysmis“ oder „missing“ angesprochen werden.
Angenommen, neben den Werten 1 bis 4 gibt es auch die Werte 8 und 9, die als fehlende Werte definiert sind. Hier ein paar Beispiele und was sie bewirken.
RECODE famimpor (missing = 8).
Alle fehlenden Werte (d.h. die Werte 8 und 9 und vielleicht auch die fehlenden Systemwerte) haben den Wert 8. 8 wird weiterhin als fehlend definiert.
RECODE famimpor (missing = 7).
Alle fehlenden Werte (d.h. die Werte 8 und 9 und vielleicht auch die fehlenden Systemwerte) erhalten den Wert 7. 7 wird nicht als fehlend definiert!
Wenn Sie fehlende Systemwerte haben und nur diese auf einen anderen Wert umcodieren wollen, können Sie das Schlüsselwort „sysmis“ anstelle von „fehlend“ verwenden.
RECODE famimpor (sysmis = 7).
Auch wenn Sie die Werte 8 und 9 als fehlend definiert haben, wird 7 nicht als ein (ehemals) fehlender Wert erkannt. Sie können entweder 7 jetzt als fehlend definieren oder eine Wertbezeichnung vergeben, die Ihnen die Bedeutung von 7 verrät.
Vereinfachungen
Oft müssen mehrere Werte einer Variablen angesprochen werden. Einige Schlüsselwörter erleichtern diesen Vorgang.
RECODE famimpor (niedrigster bis 3 = 3).
RECODE famimpor (2 bis höchster = 2).
Der erste Befehl rekodiert alle Werte vom niedrigsten Wert bis (und einschließlich) Wert 3 in den Wert 3. Der zweite Befehl rekodiert alle Werte vom Wert 2 bis (und einschließlich) zum höchsten Wert in den Wert 2. Beachten Sie, dass „niedrigster“ als „lo“ und „höchster“ als „hi“ abgekürzt werden kann. ACHTUNG: Unter der Annahme, dass 8 und 9 noch als fehlende Werte definiert sind, werden diese im letzten Beispiel zu 2 umkodiert (und natürlich nicht mehr als fehlend definiert).