통계공부/Stata

[Stata] 기본 명령어(7): replace, recode

대학원생A씨 2020. 3. 29. 09:45
반응형

 이번 포스팅에서는 Stata의 기본 명령어 중 replace, recode에 대해 알아보고자 한다. 여기서 말하는 기본 명령어란, Stata 프로그램의 세팅과 관련된 명령어와 데이터(혹은 변수) 조작과 관련한 기초적인 명령어들을 뜻한다.

 

그리고 앞선 포스팅에서와 마찬가지로 stata lifeexp 데이터를 이용하여 예시를 설명하고자 한다.(Command 창에 sysuse lifeexp라고 쓰면 stata에 내재된lifeexp 데이터를 불러올 수 있다.) 

 

 

1. replace

replace 변수명 = [if] [in] : 해당 변수의 값을 변경할 때 쓰는 명령어

replace는 변숫값을 변경할 때 쓰는 명령어로, 해당 변수를 특정 값으로 바꾼다는 것을 의미한다. 이 때, if 혹은 in 등을 같이 써서 좀 더 다양하게 활용할 수 있다

 

예를 들어, lifeexp 데이터에서 safewater 변수를 보면 무응답이 .으로 코딩되어 있는데, 해당 값을 모두 -9로 변경하고 싶다고 해보자. 그러면 이 때 다음과 같이 command를 작성할 수 있다(추후에 설명하겠지만, 이는 recode라는 명령어를 쓰는 것도 가능하다).

 

replace safewater=-9 if (safewater==.)

 

위의 command를 보면 safewater -9로 대체(replace)하라고 하였는데, 뒤에 if라는 조건을 붙여주었다. if 안의 내용을 보면, safewater가 결측값(.)인 경우라고 제시를 하고 있다. 이 때, 유의할 점은 앞에서 safewater -9로 바꾸라고 할 때는 =를 하나만 썼지만 if 조건문에서는 =를 두 개 쓴다는 것이다. 일반적으로 stata에서 어떠한 변숫값을 새로 지정하거나 바꿀 때는 괄호를 하나 쓰지만, if 조건문에서와 같이 변숫값이 ~이다와 같이 등호가 본질적으로(?) 등호를 의미할 때는 두 개(==)를 쓰는 편이다. 처음에는 헷갈릴 수 있지만, 그냥 command 창에 입력해보고 오류가 나면 등호를 하나 더 추가하거나 빼는 식으로 수정하고 다시 시도하면 돌아갈 것이다.

 

어쨌든, 위의 코드를 입력하면 다음과 같이 결과가 바뀐다.

[왼쪽] Stata의 결과창에 해당 코드를 입력하면 28개의 값들이 변경되었다고 나온다. [오른쪽]을 확인하면, 결측값(.)으로 표시되어 있던 값들이 -9로 변경되었음을 알 수 있다.  

 

2. recode

recode 변수명 (규칙), [gen(새로운 변수명)] : 해당 범주형 변수()의 값을 재코딩할 때 쓰는 명령어

우선 recode범주형 변수(categorical variables)에만 적용가능하다. , 연속형 변수에는 적용이 불가능하니 연속형 변수의 값을 변경하고 싶은 경우에는 1번에서 설명한 replace를 활용하면 된다

 

위의 code에서 변수명에는 여러 개의 변수가 동시에 들어갈 수 있으며, (규칙) 부분을 제대로 이해해야 recode를 다양하게 활용하여 사용할 수 있다. 

 

Help창에서 이를 잘 정리해놓았는데, 먼저 # = #부터 보자. 예시에서와 같이 3 = 1기존 변수에서 3값을 1로 재코딩함을 의미한다. 그 다음의 # # = #앞의 두 개의 값(# #)을 등호 뒤에 있는 #의 값으로 변경한다는 것이다. 그래서 예시에서 제시된 2 . = 9는 기존의 2와 결측값(.) 9로 재코딩함을 의미한다. 세 번째로 /은 ~을 의미한다고 보면 되는데, 그래서 예시에서 1/5 = 4 1부터 5까지의 값을 4로 재코딩함을 뜻한다. 마지막으로 nonmiss = 8결측값을 제외한 모든 값들을 8, mis = 9결측값을 9로 코딩함을 의미한다.

 

논문을 읽다보면 '역코딩'이라는 말을 한 번쯤은 보았을 것이다. 역코딩은 말그대로 reverse를 떠올리면 이해하기 쉬운데, 대표적으로 역문항을 코딩할 때 많이 쓰인다. 역문항은 보통 다른 문항들과 반대로 점수를 코딩하여야 하는데, 일반적으로는 처음 데이터를 코딩할 때는 응답자가 설문한 그대로 데이터를 저장해두지만, 이를 분석하는 단계에서는 점수를 거꾸로 해주어야 한다. 예를 들어, 자아존중감 척도를 보면 역문항이 중간중간 섞여 있다.

척도는 Rosenberg (1965) 의 자아존중감 척도를 고려대학교 부설 행동과학연구소 (2000) 에서 번안한 것을 재인용한 것. 해당 그림은 한국아동청소년패널의 자아존중감 설문지 문항을 따온 것

 

그런데 해당 척도의 평균을 내어 자아존중감 점수를 하나로 계산하고자 할 때, 해당 역문항들을 역코딩하지 않으면 그 점수는 무의미해진다. 따라서 2, 5, 6, 8, 9번과 같은 역문항은 다른 문항들과 점수의 의미 방향이 동일하도록 역코딩을 해주어야 한다. , 1→ 4, 2 → 3, 3 → 2, 4 → 1로 코딩을 해주어야 하며, 이를 역코딩이라 한다.

 

recode var (1=5) (2=4) (3=3) (4=2) (5=1)
recode var (1=4) (2=3) (3=2) (4=1)

 

역코딩할 때, 주로 쓰는 코드는 위와 같다. 첫 번째 코드는 5likert 척도의 문항에서 사용하면 되고, 아래는 4likert 척도의 문항에 적용할 수 있다. 이처럼 recode 문항은 변수를 기본 세팅하는 과정에서 많이 쓰이는 명령어이므로 자주 사용하여 익혀두는 것이 좋다. 

반응형