패널자료의구조 및데이터관리 2014. 5. 31.
STATA 로 통계분석하기 2
Stata 프로그램의파일저장 주실행프로그램은 C:\Program Files\St ata10 폴더에설치된다. 많은명령어들이 C:\Program Files\Stata 10\ado\base 폴더에설치된 ado 파일로정의된다. 업데이트할경우새로운 ado 파일이나수정된파일이 C:\Program Files\Stata10\a do\update 폴더에설치된다. 3
Stata 파일종류.dta 파일 : Stata 데이터.do 파일 : 명령문파일.ado 파일 : 프로그램.sthlp 파일 : 도움말.gph 파일 : 그래프.txt 파일 : 표준 ASCII 포맷 ( 일반텍스트파일 ).scheme: 그래프설정 4
명령어의일반구문 [ 접두어 :] 명령어 [ 변수목록 ] [if] [in] [ 가중값 ] [, 옵션 ] 명령어에대한온라인도움말은 help 명령어를사용하여볼수있다. 데이터셋에있는모든변수를선택할경우 _all 을사용한다. 명령문에종속변수를지정하는경우, 변수목록의맨앞에위치시킨다. 숫자목록은줄여서쓸수있는숫자의목록이다. 1(3)11 은 1 4 7 10 을의미한다. 1/5 는 1 2 3 4 5 를의미한다. 예 ) 연령을 0-4, 5-14, 15-24,, 75-84, 85+ 로구분한변수만들기 egen agegrp=cut(age), at(0 5(10)85 200) 연령을 0-24, 25-44, 45+ 로구분한변수만들기 recode age (0/24=1)(25/44=2)(45/max=3), generate(agegr) 5
명령어의일반구문 if 한정어는어떤명령어가적용될관찰값을선택하는논리식에서사용한다. keep if sex==1 age<=25 in 한정어는명령어가적용될관찰값을선택하기위해사용한다. list sex age weight in 23 23 번째관찰값 by 변수목록 : 접두어를이용하면데이터를여러층으로나누어계산을수행하고결과를출력한다. 반드시데이터를층을이루는변수로미리정렬시켜야한다. sort sex by sex: summarize age height weight 6
명령어의일반구문 do- 파일과 ado- 파일에다음세가지로주석 (comment) 를적을수있다. * 로시작하는행 /* 과 */ 로둘러싸인텍스트 // 로시작하는텍스트 do- 파일과 ado- 파일에명령어가한줄에끝나면명령을끝내기위한구분기호가필요없다. /// 을입력하여명령문이다음행에계속됨을지정할수없다. 결측값은어떤유효한숫자보다큰값으로취급된다. 7
변수명 변수이름은 1-32 글자가가능하다. ( 최대 10 글자이내로붙이는것이바람직 ) 알파벳, 숫자, _( 밑줄 ) 은변수이름으로사용가능하다. 비영어권문자는사용이불가능할수도있다. 변수이름은반드시문자로시작되어야한다. 8
오류와오류메시지 대소문자구별 : STATA 는명령어, 변수에서대소문자를구별한다. 관계식등호 : 지식등호 (=) 와관계식등호 (==) 를구별한다. 쉼표와옵션 : 쉼표다음에나오는모든것을옵션으로해석한다. 옵션이름과설명사이의빈칸 : 옵션이름과이어지는괄호사이에빈칸이있으면안된다. 9
Stata 로데이터가져오기와 내보내기 cd C:\docs\proj1 디렉토리를변경한다. use example1.dta 현재디렉터리에 example.dta 를불러온다. use c:\docs\proj1\example1.data sysuse auto Stata 설치시함께설치된데이터셋불러오기 webuse lwb.dta 인터넷에서이용가능한데이터셋불러오기 save example2.dta 현재디렉터리에 example2.dt a 를저장한다. clear 메모리에있는데이터를지운다. 10
데이터입력하기 작은데이터셋인경우 input 명령어로변수를정의하고값을입력한다. input case expose pop 0 0 100 0 1 30 1 1 21 end 11
엑셀데이타가져오기 엑셀에서데이터파일을연다 엑셀메뉴에서 [ 파일 > 다른이름으로저장 ] 을선택한후파일형식텍스트 ( 탭으로분리 ) 를선택한후저장한다. STATA 프로그램메뉴바 [File > Import > ASCII data created by a spreadsheet] 를선택한다. 12
엑셀데이타가져오기 13
엑셀데이타가져오기 명령문을사용하여텍스트파일을불러들일수있다. insheet using c:\ejpark\stata\pharm.txt, clear 명령문을사용하여엑셀파일을불러들일수있다. xmluse pharm.xml, doctype(excel) sheet( sheet1 ) firstrow firstrow 옵션은스프레드시트의첫째줄을변수이름으로가져온다. 14
엑셀로데이터변환하기 xmslave pharm.xml, doctype(excel) 15
패널자료의구조 및데이터관리
패널자료의구조 패널구조는기본적으로같은응답자가여러해에걸쳐서반복적으로응답을한것을기록한구조이다. 개인식별자 (ID) 를중심으로해서연간자료가붙어있는모습을갖는다. 17
패널데이터의정렬 패널분석을하기전 tsset, xtset 을사용하여데이터를정렬한다. tsset 패널변수명 ( 개체 ) 시간변수명 ( 시간 ) xtset 패널변수명시간변수명 xtset 다음에오는패널변수는반드시숫자변수이어야한다. 문자변수 숫자변수 : encode 숫자변수 문자변수 : decode 18
use P_data1_1 tsset state_code year panel variable: state_code (strongly balanced) time variable: year, 1970 to 2000, but with gaps delta: 1 unit xtset state_code year panel variable: state_code (strongly balanced) time variable: year, 1970 to 2000, but with gaps delta: 1 unit encode state, gen(state_code1) label list state_code1: 1 CT 2 MA 3 ME 4 NH 5 RI 6 VT decode state_code1, gen(state1) 19
패널데이터의유형 균형패널 vs. 불균형패널 균형패널 : 각개체의데이터포괄기간이서로동일한경우 불균형패널 : 각개체의데이터포괄기간이서로동일하지않은경우 시간갭 (time gap) 이있는패널 vs. 시간갭이없는패널 20
시간갭이없는균형패널 use P_data1_2 tsset state_code year panel variable: state_code (strongly balanced) time variable: year, 1970 to 1973 delta: 1 year 21
시간갭이있는균형패널 use P_data1_1 tsset state_code year panel variable: state_code (strongly balanced) time variable: year, 1970 to 2000, but with gaps delta: 1 unit * 시간갭이없는데이터로인식 by state_code, sort: gen time=_n tsset state_code time panel variable: state_code (strongly balanced) time variable: time, 1 to 4 delta: 1 unit 22
시간갭이없는불균형패널 use P_data1_3 tsset state_code year panel variable: state_code (unbalanced) time variable: year, 1970 to 1973 delta: 1 year 23
시간갭이있는불균형패널 use P_data1_4 tsset hhid year panel variable: hhid (unbalanced) time variable: year, 2000 to 2006, but with gaps delta: 1 unit 24
시간변수생성 use P_data2_1 /* 시간변수 ( 연도, year) 생성 */ by company, sort: gen year=1929+_n /* 시간변수 ( 분기, quarter) 생성 */ by company, sort: gen quarter=yq(1929,4)+_n format quarter %tq /* 시간변수 ( 월별, monthly) 생성 */ by company, sort: gen month=ym(1929, 12)+_n format month %tm /* 시간변수 ( 일별, daily) 생성 */ by company, sort: gen day=mdy(12,31, 1929)+_n format day %td 25
시간변수생성 use P_data2_1 /* 시간갭이있는시간변수생성 */ by company, sort: gen year2=1920+10*_n 26
시간변수주기변환 구분 STATA 명령어 일별주기 월별주기 mofd( ) 일별주기 분기별주기 qofd( ) 일별주기 연도별주기 yofd( ) 월별주기 일별주기 dofm( ) 분기별주가 일별주기 dofq( ) 연도별주기 일별주기 dofy( ) 27
시간변수주기변환 use P_data2_2 /* 일별주기 -> 월별주기 */ gen dm=mofd(date) format dm %tm /* 월별주기 -> 일별주기 */ gen day1=dofm(dm) format day1 %td /* 월별주기 -> 분기별주기 */ gen mq=qofd(dofm(dm)) format mq %tq 28
시간변수주기변환 : 데이터주기변환 use P_data2_2 /* 일별데이터 -> 월평균데이타 */ gen dm1=mofd(date) format dm1 %tm collapse (mean) dowclose, by(dm1) 29
시간변수주기변환 : 데이터주기변환 /* 월별데이터 -> 분기별합산데이터 */ use P_data2_3, clear gen m_q=qofd(dofm(month)) format m_q %tq collapse (sum) invest mvalue /// kstock, by(company m_q) 30
시간변수주기변환 : 시간변수관리 use P_data2_4, clear /* 시간변수의연월일분리 */ gen date1=dofm(dm) /* 월별주기 -> 일별주기 */ format date1 %td gen year1=year(date1) gen month1=month(date1) gen day1=day(date1) * 시간변수의연월일분리는오직일별주기에서만가능 /* 년, 월, 일로분리된시간변수하나로합치기 */ gen date2=mdy(month1, day1, year1) format date2 %td /* 날짜에해당하는요일변수만들기 */ gen week_d=dow(date1) 31
egen 명령어 ssc install egenmore use P_data2_2, clear /* 월의첫째날 (1 일 ) 을변수로생성 */ egen bom1=bom(1, 1953) format bom1 %td /* 월을첫째날이휴일이면그다음날을변수로지정 */ egen bom2=bom(2, 1953), work format(%td) /* 일별주기시간변수의월의첫째날을변수로생성 */ egen bom3=bomd(date), format(%td) /* 월의첫째날부터날짜세기 */ egen ela_bom=date-bom3 32
egen 명령어 /* 월의마지막날짜를변수로생성 */ egen eom1=eom(1, 1953), format(%td) /* 일별주기시간변수의월의마지막날을변수로생성 */ egen eom2=eomd(date), format(%td) /* 그해의 1 월 1 일부터날짜세기 */ egen day1=dayofyear(date) /* 3 월 1 일부터날짜세기 */ egen day2=dayofyear(date), month(3) 33
egen 명령어 use P_data2_5, clear /* 각시점까지의최대값을변수로생성 */ egen maxtodate=record(invest), by(company) order(time) /* 각회사의최대값을변수로생성 */ by company, sort : egen float max1=max(invest) /* 각시점까지의최소값을변수로생성 */ egen mintodate=record(invest), by(company) order(time) min 34
시계열연산자 시계열연산자 (operator) 래그 (lag, 과거값 ) 리드 (lead, 미래값 ) 차분 (difference) use P_data2_6, clear /* 한국노동패널데이터, 가구용패널자료 */ tsset hhid year panel variable: hhid (strongly balanced) time variable: year, 2000 to 2006 delta: 1 unit 35
시계열연산자 : lag /* L 연산자를사용하여 1 기래그 (lag) 값만들기 */ gen total_income1=l.total_income /* [_n-1] 을사용하여 1 기래그 (lag) 값만들기 */ by hhid, sort: gen total_income11=total_income[_n-1] /* L 연산자를사용하여 2 기래그 (lag) 값만들기 */ gen total_income2=l2.total_income /* [_n-1] 을사용하여 2 기래그 (lag) 값만들기 */ by hhid, sort: gen total_income22=total_income[_n-2] 36
시계열연산자 : lead /* F 연산자를사용하여 1 기리드 (lead) 값만들기 */ gen total_income3=f.total_income /* [_n+1] 을사용하여 1 기리드 (lead) 값만들기 */ by hhid, sort: gen total_income33=total_income[_n+1] 37
시간갭이있는자료의래그와리드값만들기 use P_data2_7, clear tsset hhid year panel variable: hhid (unbalanced) time variable: year, 2000 to 2006, but with gaps delta: 1 unit 38
시간갭이있는자료의래그와리드값만들기 gen fin_asset1=l.fin_asset by hhid, sort: gen fin_asset11=fin_asset[_n-1] gen fin_asset2=f.fin_asset by hhid, sort: gen fin_asset22=fin_asset[_n+1] L 연산자는해당년도의값이없을경우결측치로처리하나 [_n+1] 은관측치가있는것중에서래그값을취한다. 39
시계열연산자 : 차분 use P_data2_9, clear tsset company quarter panel variable: company (strongly balanced) time variable: quarter, 1930q1 to 1934q4 delta: 1 quarter 40
시계열연산자 : 차분 use P_data2_9, clear tsset company quarter /* D 연산자를사용하여 1 차차분 (first-difference) 만들기 */ gen dinvest=d.invest /* [_n-1] 을사용하여 1 차차분만들기 */ by company, sort: gen dinvest1=invest-invest[_n-1] /* D 연산자를사용하여 2 차차분 (first-difference) 만들기 */ gen d2invest=d2.invest /* 계절차분만들기 */ gen s2invest=s2.invest 41
패널데이터관리 : xtdes use P_data3_1 tsset hhid year panel variable: hhid (strongly balanced) time variable: year, 2000 to 2006 delta: 1 unit Xtdes hhid: 64, 113,..., 5307 n= 142 year: 2000, 2001,..., 2006 T= 7 ( 시간변수관측개체중개수가가장긴것이 7년 ) Delta(year) = 1 unit Span(year) = 7 periods (hhid*year uniquely identifies each observation) Distribution of T_i: min 5% 25% 50% 75% 95% max 7 7 7 7 7 7 7 Freq. Percent Cum. Pattern ---------------------------+--------- 142 100.00 100.00 1111111 ---------------------------+--------- 142 100.00 XXXXXXX 2000 년에데이터값이존재 42
패널데이터관리 : xtdes use P_data3_2, clear tsset hhid year panel variable: hhid (unbalanced) time variable: year, 2000 to 2006, but with gaps delta: 1 unit xtdes hhid: 12, 64,..., 6949 n = 306 year: 2000, 2001,..., 2006 T = 7 Delta(year) = 1 unit Span(year) = 7 periods (hhid*year uniquely identifies each observation) Distribution of T_i: min 5% 25% 50% 75% 95% max 1 1 3 6 7 7 7 Freq. Percent Cum. Pattern ---------------------------+--------- 142 46.41 46.41 1111111 16 5.23 51.63.111111 15 4.90 56.54...111 12 3.92 60.46...11 10 3.27 63.73...1 10 3.27 66.99...1111 10 3.27 70.26 1... 7 2.29 72.55 11... 6 1.96 74.51..11111 78 25.49 100.00 (other patterns) ---------------------------+--------- 306 100.00 XXXXXXX 306 개개체의데이터포괄기간을오름차순정렬시한가운데위치한개체의데이터포괄기간이 6 년임. 43
패널데이터관리 : xpattern use P_data3_4, clear (NLS Women 14-24 in 1968) qui tsset idcode year xtdes idcode: 1, 2,..., 10 n = 8 year: 70, 71,..., 88 T = 12 Delta(year) = 1 unit Span(year) = 19 periods (idcode*year uniquely identifies each observation) Distribution of T_i: min 5% 25% 50% 75% 95% max 5 5 6 8 10 12 12 Freq. Percent Cum. Pattern ---------------------------+--------------------- 1 12.50 12.50..1...1..1..1.1.11 1 12.50 25.00.1...11.1.11.1.11 1 12.50 37.50.111...11.1.11.1.11 1 12.50 50.00 11...1..1.1... 1 12.50 62.50 111...11 1 12.50 75.00 111...1.11.1.11 1 12.50 87.50 1111...1..1.1... 1 12.50 100.00 1111...11.1.11.1.11 ---------------------------+--------------------- 8 100.00 XXXX...XX.X.XX.X.XX 해당시점에관측개체가전혀존재하지않음 44
패널데이터관리 : xpattern use P_data3_4, clear (NLS Women 14-24 in 1968) findit xtpattern xtpattern, gen(pattern) 45
패널데이터관리 : xpattern use P_data3_4, clear (NLS Women 14-24 in 1968) pattern Freq. Percent Cum. xtpattern, gen(pattern) egen byte tag1=tag(idcode) tab pattern if tag1==1..1.1.1.1111 1 12.50 12.50.1..11111111 1 12.50 25.00.11111111111 1 12.50 37.50 11..1.11... 1 12.50 50.00 111...11 1 12.50 62.50 111...111111 1 12.50 75.00 11111.11... 1 12.50 87.50 111111111111 1 12.50 100.00 Total 8 100.00 46
패널데이터관리 : reshape use P_data3_5, clear (NLS Women 14-24 in 1968) db reshape reshape long pop, i(state) j(year) * Stata 에서패널데이터분석을위해서는데이터구조가반드시 long type 이어야한다. 47