Stata 범주형 변수 만들기 - stata beomjuhyeong byeonsu mandeulgi

tabulate & generate()

STATA를 통해 가장 쉽게 더미 변수를 생성하는 방법은 tabulate과 generate command를 사용하는 것입니다. 

tabulate 기존변수명, generate(더미변수명)

list 

을 실행시키면 기존 변수에서의 관측치의 갯수에 따라 더미변수명1, 더미변수명2, 더미변수명3...라는 변수가 자동으로 생성됩니다. 

xi: i.

xi command 역시 쉽게 더미 변수를 생성하도록 해줍니다. ‘i.*’는 xi 와 같이 쓰이면 ‘i.’ 뒤에 나오는 범주형 변수로 인식하고 더미 변수를 자동으로 생성해주는 역할을 하게 됩니다.

xi i.group

xi: reg wage_hourly age c.age#c.age i.w2edu

한편, 두번째 예와 같이 더미변수로 regression을 할 때에는 이렇게 생성된 (더미변수의 수-1)의 변수가 regression에 들어갑니다. 

generate

그러나 이렇게 범주가 나뉘어지지 않은 자료에 대하여 일정한 조건 하에 더미변수를 생성해야 할 때도 있습니다. 예컨대 25세를 기준으로 young한지 아닌지에 대한 더미를 생성한다고 합시다.

gen young = 0 

replace young = 1 if age<25

replace young = . if missing(age)

gen young = (age<25) if !missing(age) 

두번째 command의 경우, age<25이라는 조건이 맞으면 1, 그렇지 않으면 0을 부여합니다. 그리고 결측값에 대해서는 이를 0으로 처리하지 않도록 확인합니다. STATA는 결측값을 무한대로 처리합니다. 

!missing(x)는 해당 값이 결측값이 아니라는 것을 나타냅니다.

Stata 범주형 변수 만들기 - stata beomjuhyeong byeonsu mandeulgi

egen

새 변수를 생성하는 명령어 generate 확장 버전

■ 명령어 구조

egen [type] newvar = fcn(arguments) [if] [in] [, options]

egen [타입] 새 변수명 = 함수(인자) [if] [in] [, 옵션]

* 대화창 실행은 명령문창에 db egen 입력

Stata 범주형 변수 만들기 - stata beomjuhyeong byeonsu mandeulgi

■ egen 전용 함수(fcn( )) 분류

'fcn( )'은 egen 전용 함수를 뜻하며, 함수에 따라 괄호 안의 값은 표현식, 변수리스트, 숫자리스트를 넣을 수 있습니다. egen 함수를 주제별로 분류해서 설명합니다.(내용을 클릭하면 해당 게시글로 이동합니다)

Part 1. 요약 통계량 변수 생성

Part 2. 패턴을 사용한 변수 생성

Part 3. 관측치 간 일치여부를 표시한 변수 생성

Part 4. 순위를 표시한 변수 생성

Part 5. 표준화된 변수 생성

Part 6. 가로 방향 함수를 사용한 변수 생성

Part 7. 범주형 및 정수형 변수 생성(현재게시글)

Part 8. 문자변수 생성

* egen 함수에 대한 더 자세한 내용은 help 명령어를 통해 확인하세요.

Part 7. 범주형 및 정수형 변수 생성

7-1. anyvalue: 변수값이 지정한 정수형 숫자범위에 해당되면 자신의 값을 선택하고, 그렇지 않으면 결측으로 처리하는 함수

anyvalue(변수명), values(정수형 숫자범위)

* 변수명 하나만 입력 가능

① 숫자범위는 정수만 가능

* 예제 명령문은 Do파일 편집기에서 실행하세요.

use https://www.stata-press.com/data/r17/auto, clear keep rep78 // 지정된 변수만 남김 egen anyvalue = anyvalue(rep78), values(3/5) // rep78값이 3~5사이의 정수에 해당되면 추출하고, 그렇지 않으면 결측치를 생성 // values(3/5)를 values(3 4 5)로 입력 가능 list in 11/20 // 모든 변수의 11~20번째 값 보기

Stata 범주형 변수 만들기 - stata beomjuhyeong byeonsu mandeulgi

<실행 결과>

▶ 대화창 이용 방법

- 예제: egen anyvalue = anyvalue(rep78), values(3/5)

Stata 범주형 변수 만들기 - stata beomjuhyeong byeonsu mandeulgi

참고사항!

generate 명령어에 inlist( )를 사용하여, 위와 동일한 값을 만들 수 있습니다.

generate anyvalue = rep78 if inlist(rep78,3,4,5)

7-2. anymatch: 변수리스트의 값이 하나라도 지정한 정수형 숫자 범위에 해당되면 1, 그렇지 않으면 0으로 처리하는 함수

anymatch(변수리스트), values(정수형 숫자범위)

* 변수리스트에는 한 개 이상의 변수명 입력 가능

① 숫자범위는 정수만 가능

* 결과가 한자리 숫자로 표현되기 때문에 데이터 타입을 가장 작은 byte 타입으로 지정하면 메모리를 절약할 수 있습니다.

use https://www.stata-press.com/data/r17/auto, clear keep rep78 headroom // 지정된 변수만 남김 egen anymatch = anymatch(rep78 headroom), values(3/5) // 지정된 변수값이 값이 하나라도 3~5사이의 정수에 해당되면 1 그렇지 않으면 0 생성 // values(3/5)를 values(3 4 5)로 입력 가능 list in 11/20 // 모든 변수의 11~20번째 값 보기

Stata 범주형 변수 만들기 - stata beomjuhyeong byeonsu mandeulgi

<실행 결과>

▶ 대화창 이용 방법

- 예제: egen anymatch = anymatch(rep78 headroom), values(3/5)

Stata 범주형 변수 만들기 - stata beomjuhyeong byeonsu mandeulgi

참고사항!

generate 명령어에 inlist( )를 사용하여, 위와 동일한 값을 만들 수 있습니다.

generate anymatch = inlist(rep78,3,4,5)

7-3. anycount: 지정한 정수형 숫자범위에 해당되는 변수리스트의 관측치 개수 구하는 함수

anycount(변수리스트), values(정수형 숫자범위)

* 변수리스트에는 한 개 이상의 변수명 입력 가능

① 숫자범위는 정수만 가능

use https://www.stata-press.com/data/r17/auto, clear keep rep78 headroom // 지정된 변수만 남김 egen anycount = anycount(rep78 headroom), values(3/5) // 3~5사이의 정수에 해당되는 rep78, headroom의 관측치 개수를 합산하여 생성 // values(3/5)를 values(3 4 5)로 입력 가능 list in 11/20 // 모든 변수의 11~20번째 값 보기

Stata 범주형 변수 만들기 - stata beomjuhyeong byeonsu mandeulgi

<실행 결과>

▶ 대화창 이용 방법

- 예제: egen anycount = anycount(rep78 headroom), values(3/5)

Stata 범주형 변수 만들기 - stata beomjuhyeong byeonsu mandeulgi

7-4. group: 오름차순으로 정렬한 변수리스트의 값에서 동일한 그룹을 묶은 뒤, 그룹의 순서대로 번호를 부여하는 함수

group(변수리스트),[missing autotype label[(값라벨명 [, replace truncate(#)])]]

* 변수리스트에는 하나 이상의 변수명 입력 가능

① 변수리스트는 숫자변수, 문자변수 모두 가능

② 문자변수의 오름차순은 알파벳의 경우 A부터 Z, 한글의 경우 ㄱ부터 ㅎ으로 정렬

번호는 1부터 생성

④ 결측치는 제외되나, 옵션 missing을 적용하면 포함

⑤ 옵션 autotype적용하면 새 변수에 맞는 가장 작은 사이즈의 데이터 타입으로 저장

** ⑥~⑨번을 이해하기 전, 여기를 클릭하여 "라벨"에 대한 내용을 반드시 숙지하세요 **

변수라벨은 "group(변수리스트)" 형식으로 자동 생성

⑦ 옵션 label 또는 label(값라벨명)을적용하면 새 변수에 값라벨 설정 가능

- 옵션 label뒤에 값라벨명을 입력하지 않으면 값라벨명은 새 변수명과 동일하게 설정

- 값라벨은 변수들의 값 조합으로 생성되며, 값라벨이 있는 경우 값 대신 값라벨을 사용

⑧ 옵션 label(..., replace)를 적용하면 기존 값라벨명의 정보에 덮어씌움

⑨ 옵션 label(..., truncate(#))를 적용하면 값라벨을 우물정(#)길이만큼 잘라내고 설정함

〈예제 1〉

use https://www.stata-press.com/data/r17/egenxmpl6, clear keep sex race // 지정된 변수만 남김 keep in 1/7 // 1~7번째 관측치만 남김 egen group = group(sex race) // sex와 race값을 그룹으로 분류 후 정렬한 순서대로 번호 생성(결측치 제외) egen group_m = group(sex race), missing // 그룹 분류 대상에 결측치를 포함 list // 모든 변수값 보기

Stata 범주형 변수 만들기 - stata beomjuhyeong byeonsu mandeulgi

<실행 결과>

▶ 대화창 이용 방법

- 예제: egen group = group(sex race)

Stata 범주형 변수 만들기 - stata beomjuhyeong byeonsu mandeulgi

use https://www.stata-press.com/data/r17/egenxmpl6, clear keep sex smokes // sex와 smokes만 남김 keep in 1/5 // 1~5번째 관측치만 남김 egen group0 = group(sex smokes) // 새변수 group0의 변수라벨은 "group(sex smokes)"로 자동생성 egen group1 = group(sex smokes), label // 새변수 group1의 값라벨을 설정 // 값라벨명을 지정하지 않아서 새 변수명과 동일 // group1의 값라벨은 변수(sex smoke)의 조합으로 생성 // - 기존에 값라벨이 없는 smokes는 값(0, 1)을 그대로 사용 // - 기존에 값라벨이 있는 sex는 값 대신 값라벨(Female, Male)을 사용 egen group2 = group(sex smokes), label(lb) // 새변수 group2의 값라벨명은 "lb"로 지정 사용 describe group* // group으로 시작하는 변수값 모두 보기

Stata 범주형 변수 만들기 - stata beomjuhyeong byeonsu mandeulgi

<실행 결과>

use https://www.stata-press.com/data/r17/egenxmpl6, clear keep sex race // sex와 race만 남김 keep in 1/5 // 1~5번째 관측치만 남김 egen group1 = group(sex race), label(rglab, replace) // 기존에 rglab이라는 이름의 값라벨이 있다면 덮어쓰고, 그렇지 않으면 새로 생성 egen group2 = group(sex race), label(rglab2, truncate(1)) // 각 변수의 값을 한 자리로 잘라 값라벨 rglab2을 생성 * 변수라벨과 값라벨에 대한 자세한 내용은 Stata 메인화면에서 "변수관리자" 이용(창 > 변수관리자)를 확인 label list // 값라벨의 상세 목록을 확인(rglab 목록은 늘어났고, rglab2정보는 생성)

Stata 범주형 변수 만들기 - stata beomjuhyeong byeonsu mandeulgi

<실행 결과>

※ 아래 링크를 클릭하시면 더 많은 명령어 및 데이터 응용 방법을 확인할 수 있습니다.

※ 네이버 블로그는 정보성 페이지로 질문을 받지 않고 있습니다. 해당 내용은

“Stata 사용자모임” 카페의 "Q&A "게시판을 이용하여 주시기 바랍니다.

※ 해당 내용의 저작권은 Stata 한국 공식 판매처인 "제이슨티지"에 있습니다.