Komenda RECODE
służy do zmiany niektórych lub wszystkich wartości zmiennej. Nowe wartości mogą być przechowywane w tej samej zmiennej lub w nowej.
Prostszy przykład:
RECODE var1 var2 (1,2 = 1) (3,4 = 2).
Bardziej złożony przykład:
RECODE var1 (1,2 = 1) (3 thru 8 = 2) (missing = 99) (else = copy)
INTO var1new.
Ogólne
Załóżmy, że mamy zmienną famimpor z wartościami 1, 2, 3 i 4, mierzącą jak ważne jest posiadanie rodziny dla respondenta.
RECODE famimpor (4=3).
Zmienia to wszystkie wystąpienia wartości 4 na wartość 3. Oryginalna wartość 3 pozostaje niezmieniona. (Jeśli masz etykiety wartości, być może powinieneś je teraz odpowiednio zmienić). Wszystkie inne wartości również pozostają niezmienione.
RECODE famimpor (1,2 =1) (3,4 = 2).
Tworzy to zmienną dychotomiczną z punktem odcięcia pomiędzy 2 i 3.
RECODE famimpor (1=4) (2=3) (3=2) (4=1).
Odwraca to kolejność wartości. Zauważ, że można to osiągnąć łatwiej za pomocą polecenia COMPUTE
COMPUTE famimpor = 5 - famimpor.
). Może to być pomocne, jeśli jest wiele kategorii.
Tworzenie nowych zmiennych
Jednym z problemów jest to, że wszystkie powyższe przykłady zmieniają oryginalne wartości zmiennych. Powinieneś to zrobić tylko wtedy, gdy albo możesz odtworzyć oryginalne wartości z nowych (to byłoby możliwe tylko w ostatnim przykładzie!) lub jeśli jesteś cholernie pewny, że masz poprawną kopię swojego zestawu danych gdzie indziej. Na szczęście możesz tworzyć nowe zmienne za pomocą polecenia RECODE
, dodając INTO NEWVAR
. Zobacz następujące przykłady.
RECODE famimpor (1,2 =1) (3,4 = 2) INTO famimpod.
Tworzy to zmienną dychotomiczną z punktem odcięcia między 2 a 3. Stara zmienna pozostaje jednak nienaruszona, a zmienna dychotomiczna jest dodawana do zbioru danych z nazwą famimpod (z „D” wskazującym, że masz zmienną dychotomiczną. Ja używam takich urządzeń memotechnicznych dość często, ale oczywiście Ty nie musisz.)
Zauważ jednak, że musisz podjąć pewne środki ostrożności przy RECODING INTO nowej zmiennej. W tym przypadku, musisz być pewien, że nowa zmienna ma wszystkie prawidłowe wartości, które chcesz, aby miała. Jeśli komenda RECODE
nazwie tylko część wartości, wszystkie pozostałe wartości będą traktowane jako systemowe brakujące wartości. Istnieje jednak prosty sposób, aby poradzić sobie z tym problemem.
BŁĄD: RECODE famimpor (4=3) INTO famimpon.
To zmieniłoby wszystkie wystąpienia wartości 4 na wartość 3. Jednak wszystkie inne wartości byłyby traktowane jako systemowe braki. Oto lepszy sposób:
RECODE famimpor (4=3) (ELSE=COPY) INTO famimpon.
Zmieni to wszystkie wystąpienia wartości 4 na wartość 3, a wszystkie pozostałe wartości zostaną skopiowane do nowej zmiennej. Oczywiście, możesz wykonać tyle jawnych przekodowań, ile chcesz, a z resztą poradzić sobie za pomocą ELSE=COPY.
Część ELSE polecenia RECODE nie ogranicza się do przypadku „COPY”, który właśnie wyjaśniliśmy. Możesz jej również użyć z jawnymi wartościami, jak w poniższym przykładzie:
RECODE famimpor (4,3=2) (ELSE=1) INTO famimpor.
Jednym z problemów z RECODE INTO jest to, że etykiety zmiennych i wartości nie są tworzone automatycznie (jak powinny?). Nie zapomnij więc o etykiecie nowej zmiennej.
Wiele zmiennych
może być zaadresowanych w jednej instrukcji RECODE
, pod warunkiem, że wszystkie zmienne mają być dotknięte w ten sam sposób, jak w poniższym przykładzie.
RECODE famimpor workimpo chldimpo (4,3=2) (ELSE=1).
Jednakże, jeśli chcesz RECODE
te zmienne INTO nowe zmienne, dla każdej zmiennej konieczny jest oddzielny RECODE
wiersz poleceń.
Traktowanie brakujących wartości
Brakujące wartości mogą być adresowane poprzez słowa kluczowe „sysmis” lub „missing”.
Załóżmy, że oprócz wartości 1 do 4, istnieją również wartości 8 i 9, które są zdefiniowane jako brakujące wartości. Oto kilka przykładów i co one robią.
RECODE famimpor (missing = 8).
Wszystkie brakujące wartości (tj. wartości 8 i 9 i być może również brakujące wartości systemowe) będą miały wartość 8. 8 nadal będzie zdefiniowane jako brakujące.
RECODE famimpor (missing = 7).
Wszystkie brakujące wartości (tj. wartości 8 i 9 oraz być może również wartości brakujące systemowe) będą miały wartość 7. 7 nie będzie zdefiniowane jako brakujące!
Jeśli masz brakujące wartości systemowe i chcesz je tylko przekodować na inną wartość, możesz użyć słowa kluczowego „sysmis” zamiast „missing”.
RECODE famimpor (sysmis = 7).
Ponownie, jeśli zdefiniowałeś wartości 8 i 9 jako brakujące, 7 nie będzie rozpoznane jako (poprzednio) brakująca wartość. Możesz chcieć albo zdefiniować 7 teraz jako brakującą, albo przypisać etykietę wartości, która powie Ci znaczenie 7.
Uproszczenia
Często trzeba się zająć kilkoma wartościami zmiennej. Niektóre słowa kluczowe ułatwiają ten proces.
RECODE famimpor (lowest thru 3 = 3).
RECODE famimpor (2 thru highest = 2).
Pierwsze polecenie rekoduje wszystkie wartości od najniższej wartości do (i włącznie) wartości 3 do wartości 3. Drugie polecenie rekoduje wszystkie wartości od wartości 2 do (i włącznie) najwyższej wartości do wartości 2. Zwróć uwagę, że „najniższa” może być skracana jako „lo”, a „najwyższa” jako „hi”. UWAGA: Zakładając, że 8 i 9 są nadal zdefiniowane jako brakujące wartości użytkownika, zostaną one przekodowane do 2 w ostatnim przykładzie (i oczywiście nie będą już zdefiniowane jako brakujące).