본문으로 바로가기

연구제안 및 문의하기

함께하는 KLIPS, 소통하는 KLIPS, 열린 KLIPS

FAQ

가구자료에서 모든 가구원의 성별, 연령, 가구주와의 관계 추출 - SAS Transpose 문, SPSS Restructure , Stata Reshape 기능 이용

  • Date2016.02.03
  • Hit4,122
가구자료에 수록된 가구원의 성별, 연령, 가구주와의 관계, 학력 등의 정보들은 노동패널팀에서 자체 가공하여 개인자료에 “(가구정보)”라는 라벨이 붙은 변수로 제공하고 있다. 따라서 개인자료를 분석하는 일반적인 상황이라면 가구자료에서 가구원의 인적특성 정보들을 별도로 추출할 필요가 없다. 그러나 연구상황에 따라 개인자료에 포함되지 않은 개인의 인적 특성 등이 필요한 경우가 발생 할 수 있다. 대부분의 범용 통계패키지들은 행단위의 연단보다는 열단위(변수단위)의 연산에 적합하도록 만들어졌다. 따라서 이런 문제를 풀기 위해서는 자료의 적절한 조작이 필요하다.

가구자료의 성별, 연령, 가구주와의 관계는 아래 그림과 같이 1가구에 소속된 가구원일 경우 1개 case내에 붙어 있다. 예컨대, 1가구에 소속된 가구원이 10명이라면 1부터 15번째 가구원의 성별변수들 사이에 흩어져서 각각의 값이 들어가 있다. 우리의 목적은 이렇게 가로형태로 붙어있는 성별변수를 개인 케이스별로 잘라내어 다시 붙이는 것이다. 이렇게 하면 케이스는 조사된 개인 수에 따라 늘어나겠지만 성별변수는 원래 15개에서 1개로 줄일 수 있다.

아래 프로그램들은 가로로 15개씩 나열되어있는 데이터를 하나의 변수로 세로 형태로 전치(transpose) 시켜 묶는 것을 기본으로 하고 있다.

① 17차년도 가구자료로부터 1부터 15번째 가구원들의 성별, 가구주와의 관계, 연령변수를 추출하여 4개의 취합된 data set로 묶는다.
② 이렇게 생성된 4개의 데이터를 case merge하여, hhid17 기준으로 붙인다.

SAS는 이를 위해 transpose 문을, SPSS는 restructure 기능을, Stata는 reshape문을 사용한다. 세 코드를 비교해보면, 결국 동일한 변환과정임을 쉽게 알 수 있다.


*====================================;
* SAS - Transpose 문의 사용 ;
*====================================;

data h17; set a. klips17h;
keep hhid17 hwave17 h170221-h170235 /*pid*/ h170241-h170255 /*sex*/ h170261-h170275 /*relation*/
h170361-h170375 /*age*/ h170421-h170435/*추가탈락여부*/

if hwave17=1

proc sort by hhid17;
run

data h17; set h17;
proc transpose data=h17 out=trans1(rename=(col1=pid)); by hhid17;
var h170221-h170235;
proc transpose data=h17 out=trans2(rename=(col1=sex)); by hhid17;
var h170241-h170255;
proc transpose data=h17 out=trans3(rename=(col1=rel)); by hhid17;
var h170261-h170275;
proc transpose data=h17 out=trans4(rename=(col1=age)); by hhid17;
var h170361-h170375;
proc transpose data=h17 out=trans5(rename=(col1=change)); by hhid17;
var h170421-h170435;

data fnl; merge trans1 trans2 trans3 trans4 trans5; by hhid17;
if 1<=change<=2 /*이번 차수에서 조사된 가구와 가구원만 남기기(기존+신규)*/
drop _name_ _label_; /*불필요한 변수 탈락*/

proc means var sex rel age;
proc freq table sex rel age change;
run


*===================================.
* SPSS - Restructure 기능의 사용 .
*===================================.

GET FILE='D:\17차\users guide\17차년도\klips17h.sav'
/keep hhid17 hwave17 h170221 to h170235 h170241 to h170255 h170261 to h170275 h170361 to h170375 h170421 to h170435.

*변수설명: h170221-h170235 /*pid*/ h170241-h170255 /*sex*/ h170261-h170275 /*가구주와의 관계*/
h170361-h170375;/*만나이*/ h170421-h170435/*추가탈력여부*/*
/* data restructure (variables into cases) 메뉴에서 실행하는 법*/
/* data -> restructure -> variables into cases -> more than one (5) : pid, sex, rel, age, change */
/* 각각의 1~15가구원 변수들을 pid, sex, rel, age, change 로 묶어 지정, */
/* hhid17을 fixed variable 로 지정한다 */

VARSTOCASES /ID = id
/MAKE pid FROM h170221 to h170235
/MAKE sex FROM h170241 to h170255
/MAKE rel FROM h170261 to h170275
/MAKE age FROM h170361 to h170375
/MAKE change FROM h170421 to h170435
/INDEX = Index1(15) /KEEP = hhid17 hwave17 /NULL = KEEP.

/* 이번 차수 조사된 가구와 가구원만 남기기 */

select if (change=1 or change=2).

fre sex rel.
des age/stat=mean std min max.


/*======================================*/
/* stata - reshape 기능의 사용 */
/*======================================*/

clear
use klips17h, clear
keep if hwave17==1
keep hhid17 h170221-h170235 h170241-h170255 h170261-h170275 h170361-h170375 h170421-h170435
local i=1
foreach rel of varlist h170261-h170275 {
rename `rel' rel`i'
local ++i
}
local j=1
foreach sex of varlist h170241-h170255 {
rename `sex' sex`j'
local ++j
}
local k=1
foreach age of varlist h170361-h170375 {
rename `age' age`k'
local ++k
}
local l=1
foreach pid of varlist h170221-h170235 {
rename `pid' pid`l'
local ++l
}
local m=1
foreach change of varlist h170421-h170435 {
rename `change' change`m'
local ++m
}
reshape long pid sex rel age change, i(hhid17) j(orderInHH)
keep if change==1|change==2 /* 17차에 조사된 개인만 남기기*/

tab1 sex rel
sum age


*====================================#
* R –melt, arrange 문의 사용 #
*====================================#

#Q.10 에서 이미 적절한 형태의 자료를 생성하였다(melt문 이용).
head(hsa)

#가구별 hhid19로 정렬시켜준다.
hsa.19 ← na.omit(hsa[, -c(2,4,5,7,8)]) # 불필요 컬럼 제거
head(hsa.19)
hsa.19 ← arrange(hsa.19, hhid19) # hhid 기준으로 정렬
head(hsa.19)

table(hsa.19$sex) # 성별 빈도
summary(hsa.19$age) # 연령 통계량


<한국노동패널 1~19차년도 조사자료 User's Guide 138p Q11 참고>

스크랩