A RECODE
parancs egy változó egyes vagy összes értékének megváltoztatására szolgál. Az új értékek tárolhatók ugyanabban a változóban vagy egy új változóban.
Egyszerű példa:
RECODE var1 var2 (1,2 = 1) (3,4 = 2).
Bonyolultabb példa:
RECODE var1 (1,2 = 1) (3 thru 8 = 2) (missing = 99) (else = copy)
INTO var1new.
Általános
Tegyük fel, hogy van egy famimpor változó 1, 2, 3 és 4 értékkel, amely azt méri, hogy a válaszadó számára mennyire fontos a családja.
RECODE famimpor (4=3).
Ez a 4-es érték minden előfordulását 3-as értékre változtatja. Az eredeti 3 érték változatlan marad. (Ha vannak értékcímkéi, akkor ezeket most talán ennek megfelelően kell megváltoztatnia). Az összes többi érték is változatlan marad.
RECODE famimpor (1,2 =1) (3,4 = 2).
Ez egy dichotóm változót hoz létre, amelynek határértéke 2 és 3 között van.
RECODE famimpor (1=4) (2=3) (3=2) (4=1).
Ez megfordítja az értékek sorrendjét. Megjegyezzük, hogy ez könnyebben megvalósítható a COMPUTE
paranccsal (COMPUTE famimpor = 5 - famimpor.
). Ez akkor lehet hasznos, ha sok kategória van.
Új változók létrehozása
Az egyik probléma az, hogy a fenti példák mindegyike megváltoztatja a változó eredeti értékeit. Ezt csak akkor tedd meg, ha vagy az eredeti értékeket tudod rekonstruálni az újakból (ez csak az utolsó példában lenne lehetséges!), vagy ha rohadtul biztos vagy benne, hogy máshol van egy érvényes másolata az adathalmazodnak. Szerencsére a RECODE
paranccsal új változókat hozhatsz létre a INTO NEWVAR
hozzáadásával. Lásd a következő példákat.
RECODE famimpor (1,2 =1) (3,4 = 2) INTO famimpod.
Ez egy dichotóm változót hoz létre 2 és 3 közötti határponttal. A régi változó azonban érintetlenül marad, és a dichotóm változót famimpod névvel adjuk hozzá az adathalmazhoz (a “D” jelzi, hogy dichotóm változóval van dolgunk). Én elég gyakran használok ilyen memotechnikai eszközöket, de természetesen nem muszáj.)
Megjegyzendő azonban, hogy néhány óvintézkedést meg kell tennünk, amikor egy új változó BEJELENTÉSÉRE FELÜGYELJÜK. Ebben az esetben biztosnak kell lenned abban, hogy az új változónak minden olyan érvényes értéke van, amit szeretnél, hogy legyen. Ha a RECODE
parancs csak az értékek egy részét nevezi meg, az összes többi értéket a rendszer hiányzó értékként fogja kezelni. Ennek ellenére van egy egyszerű módja ennek a problémának a kezelésére.
HATALOM: RECODE famimpor (4=3) INTO famimpon.
Ez a 4-es érték minden előfordulását 3-as értékre változtatná. Az összes többi értéket azonban a rendszer hiányzó értékként kezelné. Íme a jobb megoldás:
RECODE famimpor (4=3) (ELSE=COPY) INTO famimpon.
Ez a 4-es érték minden előfordulását 3-as értékre változtatja, és az összes többi értéket átmásolja az új változóba. Természetesen annyi explicit átkódolást végezhetünk, amennyit csak akarunk, a többit pedig ELSE=COPY segítségével kezelhetjük.
A RECODE parancs ELSE része nem korlátozódik az imént ismertetett “COPY” esetre. Explicit értékekkel is használhatjuk, mint a következő példában:
RECODE famimpor (4,3=2) (ELSE=1) INTO famimpor.
A RECODE INTO parancs egyik problémája azonban az, hogy a változók és értékek címkéi nem jönnek létre automatikusan (hogyan is jönnének létre?). Tehát ne felejtsük el felcímkézni az új változót.
Minden változót
meg lehet szólítani egyetlen RECODE
utasításban, feltéve, hogy minden változót ugyanúgy kell érinteni, mint a következő példában.
RECODE famimpor workimpo chldimpo (4,3=2) (ELSE=1).
Ha azonban RECODE
ezeket a változókat INTO új változókba szeretnénk tenni, akkor minden egyes változóhoz külön RECODE
parancssor szükséges.
A hiányzó értékek kezelése
A hiányzó értékeket a “sysmis” vagy “missing” kulcsszavakkal lehet kezelni.
Tegyük fel, hogy az 1-4 értékek mellett a 8-as és 9-es értékek is vannak, amelyek hiányzó értékként vannak definiálva. Íme néhány példa és azok hatása.
RECODE famimpor (missing = 8).
Minden hiányzó érték (azaz a 8-as és 9-es értékek és esetleg a rendszer hiányzó értékei) a 8-as értéket kapja. A 8 továbbra is hiányzó értékként lesz definiálva.
RECODE famimpor (missing = 7).
Minden hiányzó érték (azaz a 8 és 9 értékek és esetleg a rendszer hiányzó értékei is) a 7-es értéket kapja. A 7 nem lesz hiányzó értékként definiálva!
Ha vannak hiányzó rendszerértékek, és csak ezeket szeretné átkódolni más értékre, akkor a “missing” helyett használhatja a “sysmis” kulcsszót.
RECODE famimpor (sysmis = 7).
Mégis, ha a 8-as és 9-es értékeket hiányzónak definiálta, a 7-es értéket nem fogja (korábban) hiányzó értékként felismerni. Érdemes a 7-et most vagy hiányzónak definiálni, vagy olyan értékcímkét rendelni hozzá, amely megmondja a 7 jelentését.
Egyszerűsítések
Gyakran előfordul, hogy egy változó több értékét kell kezelni. Néhány kulcsszó segít megkönnyíteni ezt a folyamatot.
RECODE famimpor (lowest thru 3 = 3).
RECODE famimpor (2 thru highest = 2).
Az első parancs a legalacsonyabb értéktől a 3-as értékig (és azt is beleértve) minden értéket a 3 értékké kódol át. A második parancs a 2 értéktől a legmagasabb értékig (és azt is beleértve) minden értéket a 2 értékbe kódol át. Megjegyzendő, hogy a “legalacsonyabb” rövidíthető “lo”-ként, a “legmagasabb” pedig “hi”-ként. FIGYELEM: Feltételezve, hogy a 8 és 9 még mindig hiányzó értékként van definiálva, ezek az utolsó példában 2-re lesznek átkódolva (és természetesen nem lesznek többé hiányzó értékként definiálva).