Stata로 통계분석을 수행하기 위한 첫 단계는 자료를 확보하는 것이다. 이상적으로는 본인의 가설을 검증할 수 있는 자료를 직접 설계하고 구축해야겠지만, 여건이 되지 않는 경우 공개된 자료를 이용하여 연구할 수밖에 없다. 한국에서 정치과정 분야 연구자라면 활용해봄직한 자료로는 우선 성균관대학교 서베이리서치센터에서 2년 주기로 실시하는 한국종합사회조사가 있다. KGSS는 한국에서는 드물게 표본 추출 등 방법론적 측면을 세심하게 고려하여 설계된 질 좋은 설문 자료이지만, 사회과학 내 여러 전공이 협동하여 진행하는 프로젝트이기에 정치학-specific한 질문들은 충분치 않으며, 대면조사라는 이유로 감정 온도계나 이슈 태도를 variation이 적은 5점 척도로 측정하는 등 아쉬운 측면도 없지는 않다. 만약 연구 관심이 특정 선거와 관련되어 있다면 한국사회과학센터나 한국사회과학자료원에서 제공하는, 선거 전후에 정치학자들에 의해 실시된 설문조사 자료들이 유용할 수 있다. 이 튜토리얼에서 우리는 KSDC에 탑재된 제19대 대통령선거 관련 유권자 의식조사를 이용하여 기본적인 전처리, 분석, 시각화를 학습할 것이다.
먼저 다음의 링크를 클릭하여 KSDC에 접속하자: http://www.ksdcdb.kr. 연구실 등 교내 IP를 이용할 경우에는 별도의 로그인 절차를 요구하지 않지만, 교외에서 접속한다면 학교 도서관 홈페이지의 학술DB
메뉴를 경유해야 한다.1 FIND DATA > 조사자료 > 주제별 검색 > 선거
를 클릭하면2 목록 최상단에서 제19대 대통령선거 관련 유권자 의식조사를 발견할 수 있을 것이다. 전체 다운로드
를 클릭하고, 다운로드된 .zip 파일은 원하는 경로에 압축 해제하자.3 이제 Stata 창을 열고, 상단 메뉴의 File > Change working directory ...
를 클릭하여4 자료가 있는 경로를 선택하면, 기본적인 준비는 끝났다.
Stata 창을 처음 열면 화면이 여러 창들로 분할되어 있는 것을 볼 수 있다. 가장 큰 공간을 차지하는, Stata 로고가 표시된 창은 Results 창으로, 입력한 명령어의 결과들이 출력된다. Results 창 바로 아래에는 명령어를 입력할 수 있는 창인 Command 창이 위치하며, 가장 하단(status bar) 좌측에는 현재 working directory가 표시된다(우측에는 Caps Lock
이 눌려 있는지 여부나 현재 Stata가 계산을 수행 중이라는 의미의 로딩 아이콘 등이 표시된다). Variables 창과 그 아래의 Properties 창은 데이터 전처리 과정에서 자주 확인하게 되는 창들로, 변수명, 변수라벨명, 특정 변수에 부착되어 있는 값라벨명 등을 확인할 수 있고, 변수 검색 역시 가능하다(스패너 아이콘 옆의 Filter variables here
). 혹시 실수로 어떤 창을 닫았다면, 상단 메뉴의 Window
에서 해당 창을 선택하여 다시 열 수 있다.
Results 창의 아무 데서나 마우스 오른쪽 클릭을 하고 Preferences...
를 선택하면, Results 창이나 Viewer 창(help 명령어로 열리는 창) 등의 설정을 조정할 수 있는 창이 열린다. 이하에서는 Results > Colors > Color scheme: Classic
을 선택하였다고 가정하고 설명할 것이다.
유감스럽게도, 이 튜토리얼에서 우리가 이용할 제19대 대통령선거 관련 유권자 의식조사는 Stata의 데이터 포맷이 아니라, SPSS 또는 Excel의 데이터 포맷으로만 제공되고 있다. Stata 16부터는 두 가지 데이터 포맷 모두 별도의 절차를 거치지 않고 Stata에서 바로 열 수 있지만, 15 이하의 버전들에서 SPSS 데이터 포맷을 열기 위해서는 변환 작업을 먼저 해주어야 한다. 변환 작업이 필요 없는 Excel 데이터 포맷의 경우 변수와 값에 라벨이 부착되어 있지 않다는 아쉬움이 있기 때문에(라벨이 없는 자료는 데이터 전처리 과정에서 코드북을 매번 확인해야 하는 번거로움이 있다), 이 튜토리얼에서 우리는 SPSS 데이터 포맷을 Stata 데이터 포맷으로 변환하는 방법들을 학습할 것이다.
내 컴퓨터에 SPSS가 이미 설치되어 있다면, 해결 방법은 간단하다: .sav 파일을 SPSS로 열고,
파일 > 다른 이름으로 저장 > 저장 유형 > Stata 버전 14 SE(*.dta)
를 선택하면 된다. 혹시 SPSS에서다른 이름으로 저장
을 지원하는 Stata의 최신 버전이 13 이하인 경우, 변환한 .dta 파일을 Stata로 열었을 때 한글이 깨지는 문제가 발생할 수 있다. 이런 때에는unicode encoding set korean
과unicode translate filename.dta , invalid
를 차례대로 Stata의 Command 창에 입력하면 한글이 깨지지 않게 할 수 있다.
usespss
package내 컴퓨터에 SPSS가 설치되어 있지 않고, Windows 64비트 환경이며, 변환할 자료가 한글이 아니라면 Stata의 user-written package인
usespss
명령어를 이용하는 것도 가능하다. 설치를 위한 코드는 다음의 링크에서 확인할 수 있다: http://www.radyakin.org/transfer/usespss/faq/info/installation.txt.
. net from http://radyakin.org/transfer/usespss/beta ─────────────────────────────────────────────────────────────────────────────────────────────────────── http://radyakin.org/transfer/usespss/beta/ (no title) ─────────────────────────────────────────────────────────────────────────────────────────────────────── PACKAGES you could -net describe-: usespss usespss.pkg Import data in SPSS (*.sav) data format !BETA! ───────────────────────────────────────────────────────────────────────────────────────────────────────
Results 창에서 하늘색으로 출력된
usespss
를 클릭하고, 스크롤을 하단으로 이동하여(click here to install)
을 클릭하면 설치가 진행된다.5 설치 후,usespss filename.sav
와save filename.dta
를 차례대로 Stata의 Command 창에 입력하면 자료가 변환된다.
내 컴퓨터에 SPSS가 설치되어 있지 않을 때 시도할 수 있는 또 하나의 방법은 R의 설치를 요구한다. 우선 다음의 링크에서 R binary를 설치하자: https://cran.r-project.org/. R의 설치가 완료되면, 역시 Stata의 user-written package인
importsav
명령어를 설치하자. 설치를 위한 코드는 다음의 링크에서 확인할 수 있다: https://github.com/jh-min/importsav#installation.
. importsav dfile_2553 "new data.dta" dfile_2553.sav was successfully converted using haven . importsav dfile_2553.sav dfile_2553.sav was successfully converted using haven
설치 후, Stata의 Command 창에
importsav "변환 전 파일명" "변환 후 파일명"
을 입력하면 자료가 변환된다(.dta 파일명을 생략시 변환된 자료는 자동으로 .sav 파일명과 동일한 이름으로 저장된다). 안타깝게도 이 명령어는 앞서 설정했던working directory
경로나 SPSS/Stata 데이터 포맷의 파일명에 한글이 포함되어 있으면 작동하지 않는데, 이것은 R 자체의 한계이다.
import
commandStata에서 .dta 파일은 상단 메뉴의
File > open
으로 열지만, .sav(16부터 지원)나 .xlsx, .csv 등 비-Stata 데이터 포맷의 파일들은 상단 메뉴의File > import
를 통해 열 수 있다.
Stata를 잘 사용하기 위한 첫 걸음은 do-file에 익숙해지는 것이다. do-file을 만들어야 하는 가장 큰 이유는 작업을 쉽게 반복[재현]할 수 있다는 것이다. 예컨대 데이터 전처리 과정을 do-file로 작성해두면, 원자료인 .dta 파일은 그대로 보존하면서도, do-file을 실행함으로써 변수를 매번 새로 코딩해야 하는 번거로움은 피할 수 있다. 변수를 모두 코딩하고 나서 변경된 데이터를 .dta 파일로 저장하는 것도 가능하지만, 원자료를 직접 수정하는 것은 (돌이킬 수 없기 때문에) 권장되지 않는다. 인간은 실수를 할 수 있고, 원자료 자체를 수정하게 되면 나중에 데이터 전처리 과정에 실수가 있었다거나 하는 이유로 원자료를 복원해야 할 때 대처하기가 어렵다. Stata 종료시 자료를 저장하겠냐고 묻는 창이 뜨면 반드시 Don't save
를 누르자.
do-file에 작성해둔 명령어들은
ctrl
+d
를 눌러 한 번에 실행할 수 있으며, 드래그를 통해 일부만 실행하는 것도 가능하다.
Stata는 /와 *를 주석 처리 기호로 사용한다. 왜 do-file에 주석이 필요할까? 내가 만든 변수라도 1년 후에 보면 낯설 수 있고, 다른 사람과 공동 작업을 할 수도 있기 때문이다. 주석을 이용해 코드에 설명을 달아두면 이해가 쉽다. 다음은 Stata의 do-file에서 주석이 작동하는 방식이다:
. * asterisk는 기호가 있는 행 전체를 무시하며, 행 제일 처음에만 사용할 수 있다. . // forward slash 2개는 기호가 쓰인 행의 나머지 부분을 무시하며, . di 6*100+7 // 행 중간에도 사용할 수 있다. 607 . di as input "ezstata.weebly.com" /// forward slash 3개는 행 중간에 사용할 수 있으며, > /// 기호가 사용된 행의 나머지 부분을 무시할 뿐만 아니라, > /// 기호가 있는 행과 다음 행을 하나의 명령어로 인식하게 한다. > as text /// > ": offers a guide for Sublime Text 3 with Stata" /* forward slash+asterisk는 > asterisk+forward slash가 등장할 때까지의 > 모든 내용(행 변화까지!)을 무시한다. */ ezstata.weebly.com: offers a guide for Sublime Text 3 with Stata . di as input "ezstata.weebly.com" as text ": offers a guide for Sublime Text 3 with Stata" ezstata.weebly.com: offers a guide for Sublime Text 3 with Stata . ** forward slash 2개 또는 3개를 행 중간에 삽입할 경우, . *** 반드시 기호 앞에 한 칸 띄어쓰고 //나 ///를 삽입해야 오류가 발생하지 않는다.
di
는 어떤 문자열(""
로 감싸진) 혹은 수식(6*100+7
)의 결과를 출력해주는 명령어이다.as input
혹은as text
는 뒤따르는 문자열 혹은 수식 계산 결과가 표시될 색을 지정해준다.
전처리를 시작하기 전에, 작업하기 편하게끔 몇 가지 간단한 설정을 할 것이다. 코드는 다음과 같다:
. cls . clear . use dfile_2553 . // use "the\path\where\data\located\dfile_2553.dta" . set more off, perm // 설치 후 최초 1회 (set more preference recorded) . rename * , low . numlabel , add
cls
는 Results 창을 깨끗하게 지워주는 명령어로, 기존에 하고 있던 작업과 구분되는 새 작업을 하고 싶을 때 편리하다. clear
는 이미 불러온 자료를 닫는 명령어인데, Variables 창을 비워주고 값라벨들을 모두 삭제한다. use
는 .dta 파일을 여는 명령어이다. 자료가 작업 디렉토리 안에 있다면 파일명만 입력해도 불러올 수 있지만, 그렇지 않다면 ""
안에 전체 경로를 입력해주어야 한다.6 set more off, perm
은 Stata를 설치하고 나서 최초로 실행하였을 때 1회 입력하는 명령어로, 설정해두지 않으면 Stata가 결과를 분할 출력하기 때문에 귀찮다.7 rename * , low
는 변수명의 대문자를 일괄적으로 소문자로 바꿔준다. Stata의 모든 명령어는 소문자이고, 명령어를 입력하고 변수명을 입력하는 과정에서 매번 대소문자를 전환하는 것은 매우 번거롭다. numlabel , add
는 빈도표 출력시 값라벨과 응답값을 모두 출력하게 해준다. 무슨 역할을 하는지는 예시를 보면서 확인하면 좋겠다.
numlabel, add
. numlabel , remove . tab dq3 선문3. │ 응답자 │ 성별 │ Freq. Percent Cum. ────────────┼─────────────────────────────────── 남자 │ 595 49.58 49.58 여자 │ 605 50.42 100.00 ────────────┼─────────────────────────────────── Total │ 1,200 100.00
numlabel , remove
는 numlabel, add
를 입력하기 이전으로 되돌리기 위한 명령어이다. dq3은 이 자료에서 성별 정보를 담고 있는 변수인데, tab
명령어로 빈도표를 출력하면 남자와 여자라는 값라벨만 출력되는 것을 확인할 수 있다.
. tab dq3 , nolab 선문3. │ 응답자 │ 성별 │ Freq. Percent Cum. ────────────┼─────────────────────────────────── 1 │ 595 49.58 49.58 2 │ 605 50.42 100.00 ────────────┼─────────────────────────────────── Total │ 1,200 100.00
한편, tab
명령어의 옵션을 이용하면, 값라벨 대신 응답값만 출력할 수도 있다. 하지만 값라벨 없이 응답값만 출력된 이 빈도표만 봐서는 1과 2중 어느 쪽이 여자인지, 설문조사 응답자들 가운데 여자가 더 많은지 남자가 더 많은지를 알 수가 없다. 값라벨인 남자와 여자는 우리가 이해하기 위한 이름이고, 응답값인 1과 2는 Stata가 이해하는 이름이라고 생각하면 편하다.
. numlabel , add . tab dq3 선문3. │ 응답자 │ 성별 │ Freq. Percent Cum. ────────────┼─────────────────────────────────── 1. 남자 │ 595 49.58 49.58 2. 여자 │ 605 50.42 100.00 ────────────┼─────────────────────────────────── Total │ 1,200 100.00
numlabel , add
명령어를 수행한 후 빈도표를 출력하면 값라벨과 응답값이 둘 다 출력된다. 왜 이 작업이 필요할까? 회귀분석을 전체 표본에서가 아니라 남자/여자로 나누어 돌리는 경우를 생각해보자. Stata가 이해할 수 있는 명령은 변수 dq3의 응답값이 2인 경우에만 회귀분석을 수행하라
는 것이지, 성별 변수의 값라벨이 여자인 경우에만 회귀분석을 수행하라
는 것이 아니다. 응답값 2가 값라벨 여자에 대응한다는 것을 모르면, Stata에게 여자인 경우에만 회귀분석을 돌리라고 명령할 수조차 없다. 우리는 값라벨만 이해하는데, Stata는 응답값만 이해하므로, 우리가 Stata와 대화하기 위해서는 둘을 동시에 출력해서 어떤 값라벨이 어떤 응답값에 대응하는지를 확인해야 하는 것이다.
gen
, recode
and replace
. sum sq12 Variable │ Obs Mean Std. Dev. Min Max ─────────────┼───────────────────────────────────────────────────────── sq12 │ 1,200 1970.427 13.97291 1935 1997 . gen age=2017-sq12 . sum age Variable │ Obs Mean Std. Dev. Min Max ─────────────┼───────────────────────────────────────────────────────── age │ 1,200 46.57333 13.97291 20 82
. recode age (20/29=2) (30/39=3) (40/49=4) (50/59=5) (60/82=6), gen(age2) (1200 differences between age and age2) . tab age2 RECODE of │ age │ Freq. Percent Cum. ────────────┼─────────────────────────────────── 2 │ 194 16.17 16.17 3 │ 221 18.42 34.58 4 │ 257 21.42 56.00 5 │ 243 20.25 76.25 6 │ 285 23.75 100.00 ────────────┼─────────────────────────────────── Total │ 1,200 100.00
. tab q42 문42. 선생님께서는 │ 대통령후보자 TV │ 토론회를 얼마나 자주 │ 보셨습니까? │ Freq. Percent Cum. ────────────────────────────────┼─────────────────────────────────── 1. 거의 모두 보았다(5-6회 이상) │ 151 12.58 12.58 2. 대부분 보았다(3-4회) │ 454 37.83 50.42 3. 거의 보지 못했다(1-2회) │ 439 36.58 87.00 4. 전혀 보지 못했다 │ 156 13.00 100.00 ────────────────────────────────┼─────────────────────────────────── Total │ 1,200 100.00 . gen tv=q42 . replace tv=5-tv (1,200 real changes made) . tab tv tv │ Freq. Percent Cum. ────────────┼─────────────────────────────────── 1 │ 156 13.00 13.00 2 │ 439 36.58 49.58 3 │ 454 37.83 87.42 4 │ 151 12.58 100.00 ────────────┼─────────────────────────────────── Total │ 1,200 100.00
. tab tv age2 │ RECODE of age tv │ 2 3 4 5 6 │ Total ───────────┼───────────────────────────────────────────────────────┼────────── 1 │ 50 30 32 15 29 │ 156 2 │ 85 85 90 83 96 │ 439 3 │ 46 81 100 107 120 │ 454 4 │ 13 25 35 38 40 │ 151 ───────────┼───────────────────────────────────────────────────────┼────────── Total │ 194 221 257 243 285 │ 1,200
. recode tv (1=1) (2 3 4=0), pre(no_) (1044 differences between tv and no_tv) . tab tv no_tv │ RECODE of tv tv │ 0 1 │ Total ───────────┼──────────────────────┼────────── 1 │ 0 156 │ 156 2 │ 439 0 │ 439 3 │ 454 0 │ 454 4 │ 151 0 │ 151 ───────────┼──────────────────────┼────────── Total │ 1,044 156 │ 1,200
. gen young=1 if age2==2 (1,006 missing values generated) . replace young=0 if age2!=2 (1,006 real changes made) . tab age2 young RECODE of │ young age │ 0 1 │ Total ───────────┼──────────────────────┼────────── 2 │ 0 194 │ 194 3 │ 221 0 │ 221 4 │ 257 0 │ 257 5 │ 243 0 │ 243 6 │ 285 0 │ 285 ───────────┼──────────────────────┼────────── Total │ 1,006 194 │ 1,200
. tab no_tv young, col ┌───────────────────┐ │ Key │ ├───────────────────┤ │ frequency │ │ column percentage │ └───────────────────┘ RECODE of │ young tv │ 0 1 │ Total ───────────┼──────────────────────┼────────── 0 │ 900 144 │ 1,044 │ 89.46 74.23 │ 87.00 ───────────┼──────────────────────┼────────── 1 │ 106 50 │ 156 │ 10.54 25.77 │ 13.00 ───────────┼──────────────────────┼────────── Total │ 1,006 194 │ 1,200 │ 100.00 100.00 │ 100.00
if
versus options. tab no_tv young RECODE of │ young tv │ 0 1 │ Total ───────────┼──────────────────────┼────────── 0 │ 900 144 │ 1,044 1 │ 106 50 │ 156 ───────────┼──────────────────────┼────────── Total │ 1,006 194 │ 1,200
if
는 명령어를 수행할 대상을 한정한다.,
이후에 붙는 옵션은 명령어가 수행되는 방식을 지정한다.
. tab no_tv young if age<40 RECODE of │ young tv │ 0 1 │ Total ───────────┼──────────────────────┼────────── 0 │ 191 144 │ 335 1 │ 30 50 │ 80 ───────────┼──────────────────────┼────────── Total │ 221 194 │ 415
tab
명령어에if
조건문을 덧붙이면, Stata는if
조건문이 성립하는 관측치에 대해서만, 즉 예시에서는 연령이 40세 미만인 응답자에 대해서만tab
명령어를 수행한다.if age<40
을 덧붙인 결과와 그렇지 않은 결과의 Total 값에 차이가 있는 것을 확인할 수 있다.
. tab no_tv young, col ┌───────────────────┐ │ Key │ ├───────────────────┤ │ frequency │ │ column percentage │ └───────────────────┘ RECODE of │ young tv │ 0 1 │ Total ───────────┼──────────────────────┼────────── 0 │ 900 144 │ 1,044 │ 89.46 74.23 │ 87.00 ───────────┼──────────────────────┼────────── 1 │ 106 50 │ 156 │ 10.54 25.77 │ 13.00 ───────────┼──────────────────────┼────────── Total │ 1,006 194 │ 1,200 │ 100.00 100.00 │ 100.00 . help tab
tab
명령어에, col
옵션을 덧붙이면, Stata는tab
명령어를 수행할 때 각 cell의 절대 빈도뿐만 아니라 열별로 계산된 상대 빈도(%)를 함께 표시한다.tab
명령어의 결과 출력 방식을 지정하는 옵션으로는col
외에도row
,cell
등이 있다. Stata의 모든 명령어들은 help document에서 각 명령어가 지원하는 옵션을 안내하고 있으니, 잘 모르겠으면help
명령어를 활용해보자.
. tab no_tv young if age<40, col ┌───────────────────┐ │ Key │ ├───────────────────┤ │ frequency │ │ column percentage │ └───────────────────┘ RECODE of │ young tv │ 0 1 │ Total ───────────┼──────────────────────┼────────── 0 │ 191 144 │ 335 │ 86.43 74.23 │ 80.72 ───────────┼──────────────────────┼────────── 1 │ 30 50 │ 80 │ 13.57 25.77 │ 19.28 ───────────┼──────────────────────┼────────── Total │ 221 194 │ 415 │ 100.00 100.00 │ 100.00
if
조건문과 옵션을 동시에 적용하는 것도 가능한데, 항상,
를 가장 마지막에 적는 것이 원칙이다(다시 말해,if
조건문이 언제나 옵션에 선행한다).
설문조사 자료들을 다룰 때 항상 주의해야 하는 지점 중 하나는 결측치의 처리이다. 설문조사에서는 종종 응답자들이 일부 질문에 대해 응답을 거부하거나, 또는 주어진 보기에 없는 답변을 하는 상황이 발생하고, 대개 자료 구축시 이러한 정보를 함께 포함한다. 이 자료에서 문54가 전형적인데, 대통령 후보들과 응답자 자신의 이념을 11점 척도로 조사하면서 추가적으로 ‘모른다’와 ‘들어본 적 없다’를 구분하고 있다. 그런데 우리가 응답을 거부하는 응답자들의 특성에 관심이 있다면 이러한 정보가 유용하겠지만, 그렇지 않은 경우에는 이러한 정보가 분석 결과를 해석하기 어렵게 만들 수도 있다.
. tab q54a1 문54-1. 문재인 │ Freq. Percent Cum. ───────────────────┼─────────────────────────────────── 0. ⓞ진보 │ 92 7.67 7.67 1. ① │ 186 15.50 23.17 2. ② │ 294 24.50 47.67 3. ③ │ 337 28.08 75.75 4. ④ │ 142 11.83 87.58 5. ⑤ │ 46 3.83 91.42 6. ⑥ │ 21 1.75 93.17 7. ⑦ │ 9 0.75 93.92 8. ⑧ │ 16 1.33 95.25 9. ⑨ │ 2 0.17 95.42 10. ⑩보수 │ 3 0.25 95.67 98. 모른다 │ 52 4.33 100.00 ───────────────────┼─────────────────────────────────── Total │ 1,200 100.00 . recode q54a1 (96 98=.), pre(re_) (52 differences between q54a1 and re_q54a1) . sum q54a1 re_q54a1 Variable │ Obs Mean Std. Dev. Min Max ─────────────┼───────────────────────────────────────────────────────── q54a1 │ 1,200 6.703333 19.50142 0 98 re_q54a1 │ 1,148 2.567944 1.598195 0 10
예를 들어, 응답자들 자신의 이념 성향이 대통령 후보들의 이념 평가에 영향을 주는지 확인하고 싶다고 해보자. 이때 98과 96으로 기록된 무응답값을 분석에서 제외하지 않으면, 예컨대 응답자 자신의 이념 응답값이 커질수록 대통령 후보의 이념 응답값이 커진다고 할 때, 그러한 상관관계가 무슨 의미인지 해석하기가 어렵다. 0부터 10까지는 값이 커질수록 보수적이지만, 10에서 98까지는 값이 커지는 것이 보수적인 정도와 관련이 없기 때문이다. 만약 응답자들 자신이 더 보수적일수록 후보들의 이념도 더 보수적으로 평가하는지가 궁금하다면, ‘모른다’와 ‘들어본 적 없다’에 해당하는 응답값인 98과 96을 결측치(
.
)로 변경하여 분석 대상에서 제외해야 한다.
while
이 자료의 문54는 동일한 문항을 대상만 바꾸어 6번 질문하고 있다. 따라서 문54의 무응답을 결측 처리하는 코드는 변수명의 문항 번호만 제외하고는 완전히 동일할 것이다. 이처럼 같은 작업을 반복해서 수행해야 하는 상황에서는 반복문(loop)이 유용하다. 반복문은 예컨대
recode q54a1 (96 98=.), pre(re)
에서 변수명 마지막 숫자를 우리가 수동으로 수정하는 대신에, Stata가 자동으로 수정하게끔 명령하는 것이다. Stata는while
,foreach
,forvalues
등 다양한 반복문 명령어를 제공하고 있는데, 이 튜토리얼에서는 가장 간단한while
문을 사용하였다.
. *** while 문 시작 *** . local i=2 // loop를 시작할 값 설정, i=2부터 . while `i'<7 { // loop를 종료할 값 설정, i=6까지 2. recode q54a`i' (96 98=.), pre(re_) // loop를 돌 때마다 현재 i값에 해당하는 변수의 recode를 수행 3. local i=`i'+1 // loop를 돌 때마다 i의 값을 1씩 증가 4. } (44 differences between q54a2 and re_q54a2) (54 differences between q54a3 and re_q54a3) (47 differences between q54a4 and re_q54a4) (51 differences between q54a5 and re_q54a5) (30 differences between q54a6 and re_q54a6) . *** while 문 종료 *** . sum q54a2-q54a6 Variable │ Obs Mean Std. Dev. Min Max ─────────────┼───────────────────────────────────────────────────────── q54a2 │ 1,200 11.725 16.87923 1 98 q54a3 │ 1,200 8.913333 19.41709 0 98 q54a4 │ 1,200 10.05167 17.83926 0 98 q54a5 │ 1,200 7.005 19.25805 0 98 q54a6 │ 1,200 7.258333 14.68797 0 98 . sum re_q54a2-re_q54a6 Variable │ Obs Mean Std. Dev. Min Max ─────────────┼───────────────────────────────────────────────────────── re_q54a2 │ 1,156 8.442907 1.311036 1 10 re_q54a3 │ 1,146 4.715532 1.69491 0 10 re_q54a4 │ 1,153 6.468343 1.760656 0 10 re_q54a5 │ 1,149 2.966057 1.782531 0 10 re_q54a6 │ 1,170 4.931624 2.131785 0 10
while
문을 사용하기 위해서는 명령어에서 반복되는 부분과 변화하는 부분을 구분하고, 변화하는 부분을 Stata에게 알려주어야 한다. 이 경우, 변수명에서 q54a까지는 반복되고, 마지막의 숫자만 변화한다. 이 변화하는 부분을 임의로 `i'
로 표시하면, 우리의 명령어는recode q54a`i' (96 98=.), pre(re_)
가 된다.while
문의 첫 두 줄은 `i'
가 변화를 시작하는 값과 종료하는 값을 지정하는 역할을 하며, 반복될 명령어는 중괄호({}
) 안에 적는다. 중괄호 안에는 `i'
값을 변화시키는local
명령어가 반드시 포함되어야 한다(이 명령어를 빠뜨리면while
문이 중단되지 않고 무한히 반복된다).
label
commandgen
revisited, clonevar
and egen
bysort
자료검색 > Browse > 학술DB
↩︎
KSDC는 설문항 검색을 지원한다. 이 기능은 원하는 질문이 포함된 설문조사 자료를 찾거나, 새로운 질문 설계시 원하는 키워드가 포함된 기존 설문항들을 찾는 용도로 유익하다.↩︎
경로에 한글이 포함되지 않는 편이 좋다.↩︎
Stata에 친숙해진다면, GUI보다는 다음처럼 명령어를 입력하는 편을 선호하게 될 것이다: cd "the\path\where\data\located"
↩︎
설치해야 할 package의 이름을 정확히 알고 있다면, 다음의 명령어가 더 편할 것이다: net install usespss , from(http://radyakin.org/transfer/usespss/beta)
↩︎
경로를 직접 입력하는 것이 귀찮다면 ctrl
+o
를 눌러 탐색기 창에서 열고 싶은 파일을 선택할 수도 있다.↩︎
Results 창이 20행 크기라고 해보자. 어떤 명령어를 수행했을 때 그 결과가 22행 크기라면, Stata는 19행까지의 결과만 출력하고, Results 창의 마지막 행에 결과 대신 –more– 메시지를 출력한다. 출력되지 않은 결과를 마저 보고 싶으면 아무 키나 누르면 되는데, 이 경우 남은 세 줄을 마저 출력하려면 아무 키나 누르는 일을 세 번 반복해야 한다.↩︎