Stata를 처음 배울 때, 명령어 하나하나는 이해가 되더라도 막상 do-file 전체를 보면 "이 코드가 지금 무슨 흐름으로 돌아가는 거지?" 싶을 때가 있었습니다.
use, rename, recode, gen, replace 정도는 알아도 전처리 파일을 만들고, 여러 데이터를 합치고, 분석용 변수를 새로 만들고, 회귀분석까지 이어지는 전체 흐름은 한 번에 잘 안들어왔었습니다.
이번 글에서는 특정 데이터셋 자체를 설명하기보다, Stata do-file에서 자주 등장하는 핵심 코드들을 초보자 눈높이에서 전반적으로 정리해보려고 합니다.
1. do-file의 시작: 작업 환경 정리
Stata do-file은 보통 아래처럼 시작하면 됩니다.
clear all
set more off
cd "C:\project\data"
clear all
현재 메모리에 올라가 있는 데이터, 설정, 결과 등을 지웁니다.
이전 작업 내용이 남아 있으면 오류가 날 수 있으므로, 처음에 작업 환경을 깨끗하게 정리하는 용도로 자주 사용합니다.
set more off
Stata는 결과가 길면 중간에 멈추면서 more를 띄우는데, 이 옵션을 끄면 코드가 자동으로 끝까지 실행됩니다.
cd
change directory, 현재 작업 폴더를 지정합니다.
이후 use "file.dta" 또는 save "result.dta", replace 같은 코드를 쓸 때 기준이 되는 경로라고 생각하면 됩니다.
2. 데이터 불러오기와 저장
가장 기본적인 입출력 명령입니다.
use "sample.dta", clear
save "sample_clean.dta", replace
use
Stata 데이터 파일(.dta)을 불러옵니다.
, clear: 기존 데이터가 있어도 지우고 불러오기
save
현재 메모리에 있는 데이터를 저장합니다.
, replace: 같은 이름의 파일이 있으면 덮어쓰기
실무나 과제에서는 보통 원본파일을 그대로 두고, 전처리한 파일을 새로운 이름으로 저장하는 식으로 많이 씁니다.
예:
- 원본: raw_data.dta
- 전처리 후: clean_data.dta
- 분석용 최종본: analysis_data.dta
이렇게 단계별 파일을 나누면 훨씬 관리하기 좋습니다.
3. 변수명 바꾸기: rename
여러 해(차시)의 데이터나 여러 버전의 데이터를 다루다 보면 같은 의미인데 변수명이 다를 때가 많습니다.
(Stata는 대소문자를 구분합니다.)
rename TSEX sex
rename AGE age
rename wt weight
이럴 때 rename으로 변수명을 통일해두면 나중에 여러 파일을 합칠 때 훨씬 편합니다.
4. 새 변수 만들기: gen
분석에 필요한 파생변수는 gen으로 만듭니다.
gen survey_year = 2023
gen wave = 7
이 코드는 모든 행에 동일한 값을 넣는 예시입니다.
또는 조건에 따라 비어있는 변수를 먼저 만든 뒤 값을 채우기도 합니다.
gen health_risk = .
여기서 . 은 Stata의 결측값입니다.
즉, 일단 빈 변수부터 만들어 둔 뒤 나중에 replace로 채우는 패턴입니다.
5. 조건에 따라 값 바꾸기: replace
replace는 기존 변수의 값을 바꾸는 명령어입니다.
replace health_risk = 1 if risk_raw == 1
replace health_risk = 0 if risk_raw == 2
특히 설문문항을 분석용 더미변수(0/1 변수)로 바꿀 때 많이 씁니다.
예를 들어 원자료가 아래처럼 되어있다고 해봅시다.
- 1 = 예
- 2 = 아니오
- 8 = 무응답
- 9 = 모름
이걸 분석용으로 바꿀 때는 보통 아래처럼 처리하면 됩니다.
- 예 → 1
- 아니오 → 0
- 무응답/모름 → 결측
6. 숫자형/문자형 맞추기: tostring
파일을 합칠 때 초보자가 많이 겪는 오류 중 하나가 같은 변수인데 자료형이 다른 경우입니다.
예를 들어 어떤 파일에서는 id가 숫자형이고, 다른 파일에서는 문자형이면 append 할 때 문제가 날 수 있습니다.
tostring id, replace format(%20.0f)
특히 주민번호 일부, 사업장 코드, 응답자 ID처럼 "숫자처럼 보이지만 사실은 식별자"인 경우, 문자열로 통일해두는 것이 안전할 때가 있습니다.
7. 특정 값을 결측으로 바꾸기: mvdecode
설문자료에서는 결측이 . 로 저장되지 않고 8, 9, 88, 99, 999 같은 코드로 들어있는 경우가 많습니다.
mvdecode edu, mv(9)
mvdecode comp_size, mv(88 99)
mvdecode workhour, mv(888 999)
이 값들은 실제 무응답값이 아니라 "모름", "무응답", "해당 없음" 같은 코드이므로 Stata의 결측값으로 바꿔주겠다는 뜻입니다.
이 작업을 안 하면 나중에 평균, 회귀분석, 상관분석에서 이상한 값으로 계산될 수 있습니다.
8. 필요한 변수만 남기기: keep
원자료에는 변수가 매우 많을 수 있습니다. 그중 실제로 분석에 쓸 변수만 남기고 싶다면 keep 을 사용합니다.
keep id sex age edu workhour income health_risk weight
이 명령어의 장점은 파일이 가벼워지고, 변수 목록이 깔끔해지고, 이후 코드 가독성이 좋아진다는 점입니다.
반대로 특정 변수만 제거하고 싶다면 drop 을 씁니다.
9. 여러 파일 이어 붙이기(세로): append
반복 조사자료나 연도별 자료를 하나로 합칠 때 자주 쓰는 명령어입니다. 개념적으로 생각해보면 세로로 이어 붙이는 것입니다.
가로로 이어붙이는 것은 merge 를 사용하면 됩니다.
use "wave1_clean.dta", clear
append using "wave2_clean.dta"
append using "wave3_clean.dta"
append using "wave4_clean.dta"
단, 이때 가장 중요한 전제는 같은 의미의 변수명이 미리 통일되어 있어야 한다는 점입니다.
그래서 앞에서 rename 작업이 중요했던 것입니다.
10. 결측이 있는 행 제거하기: drop if missing()
분석에 필요한 핵심 변수들 중 하나라도 비어있으면 회귀분석 표본에서 제외해야 할 때가 있습니다.
drop if missing(sex, age, edu, workhour, health_risk, weight_std)
괄호 안 변수들 중에 하나라도 결측이면 그 행을 삭제합니다.
이 코드는 최종 분석 표본을 확정하는 단계에서 자주 등장합니다.
다만 초보자라면, 행을 지우는 코드는 되돌리기 어렵기 때문에 가능하면 원본에 바로 하지말고
분석용 파일을 따로 저장해서 작업하는 방법이 좋습니다.
12. 값에 이름 붙이기: label define, label values
숫자 코드만 보면 결과표 해석이 불편할 수 있습니다.
그래서 범주형 변수에는 라벨을 붙이는 경우가 많습니다.
label define wh_cat 1 "<40" 2 "40-51" 3 "52-59" 4 "60+"
label values wh_cat wh_cat
이렇게 해두면 결과표나 tabulation(tab)에서 1, 2, 3, 4 대신 읽기 쉬운 범주명이 보입니다.
13. 회귀분석: reg
Stata에서 가장 기본적인 회귀명령은 reg 입니다.
reg y x1 x2 x3
초보자 때는 Stata를 배울 때 명령어를 따로따로 외우기 쉽습니다. 그리고 창에 한줄씩 입력하기도 합니다.
그런데 실제 do-file을 사용하면 한 번에 실행시킬 수 있고, 명령어들이 분석 흐름 속에서 연결되어 있다는 점이 좋습니다.
처음 보면 복잡해 보이지만, 하나씩 뜯어보면 결국은 다음 네 가지를 반복하는 경우가 많습니다.
- 데이터 정리하기
- 분석에 맞는 변수 만들기
- 표본 확정하기
- 분석 돌리고 결과 정리하기
중요한 것은 명령어를 많이 아는 것보다, 결과가 나오는 것이며
이 코드가 전체 분석 흐름 속에서 어떤 역할을 하는지 이해하는 것이라고 생각합니다.
Stata를 이제 막 시작한 분이라면
이번 글에서 나온 명령어들을 직접 작은 예제 데이터로 따라 쳐보면서 익혀보는 것을 추천합니다.
'Concept Notes > Statistics & Stata' 카테고리의 다른 글
| [Stata] Descriptive Statistics (codebook, tab, su, bysort) (0) | 2026.02.24 |
|---|---|
| Python vs SPSS vs Stata, 무엇을 배워야 할까? (0) | 2026.02.19 |
| [Stata] 한글 Label 깨짐, 인코딩 하기 (0) | 2021.05.19 |