* 오늘은 STATA에서 날짜를 다루어 본다. 대부분의 통계프로그램은 각 날짜에 대해 고유의 상수를 정의하고 사용한다.
* 이때, STATA에서는 1960년 1월을 '0'으로 정의한다. 즉, 1960년 2월은 2, 1961년 1월은 12가 된다.
* 아래의 행렬은 국민연금 수급자에게 지급하는 부양가족 연금액과 적용기간을 입력하는 내용이다.
* 1열: 적용 시작연도, 2열은 적용시작 월
* 3열: 적용 끝 연도, 4열은 적용 끝 월
* 5열: 피부양자가 배우자인 경우 지급하는 연간 부양가족 연금액
* 6열: 피부양자가 자녀 혹은 부모인 경우 지급하는 연간 부양가족 연금액
clear
mat DepMat = (1988, 1, 1990, 3, 60000, 36000 /*
*/ \1990, 4, 1992, 3, 67920, 40750 /*
*/ \1992, 4, 1994, 3, 80890, 48530 /*
*/ \1994, 4, 1996, 3, 90030, 54010 /*
*/ \1996, 4, 1998, 12, 99930, 59950 /*
*/ \1999, 1, 1999, 3, 150000, 100000 /*
*/ \1999, 4, 2000, 3, 161250, 107500 /*
*/ \2000, 4, 2001, 3, 162540, 108360 /*
*/ \2001, 4, 2002, 3, 166270, 110850 /*
*/ \2002, 4, 2003, 3, 173080, 115390 /*
*/ \2003, 4, 2004, 3, 177750, 118500 /*
*/ \2004, 4, 2005, 3, 184140, 122760 /*
*/ \2005, 4, 2006, 3, 190760, 127170 /*
*/ \2006, 4, 2007, 3, 195910, 130600 /*
*/ \2007, 4, 2008, 3, 200220, 133470 /*
*/ \2008, 4, 2009, 3, 205220, 136800 /*
*/ \2009, 4, 2010, 3, 214860, 143220 /*
*/ \2010, 4, 2011, 3, 220870, 147230 /*
*/ \2011, 4, 2012, 3, 227270, 151490 /*
*/ \2012, 4, 2013, 3, 236360, 157540 /*
*/ \2013, 4, 2014, 3, 241550, 161000 /*
*/ \2014, 4, 2015, 3, 244690, 163090 /*
*/ \2015, 4, 2016, 3, 247870, 165210 /*
*/ \2016, 4, 2017, 3, 249600, 166360 /*
*/ \2017, 4, 2018, 3, 252090, 168020 )
svmat2 DepMat // 행렬을 데이터셋으로
rename (DepMat1-DepMat6) (ap_y ap_m ed_y ed_m dep_y_spo dep_y_chpa)
gen ap_ym = ym(ap_y,ap_m) // 특정 연월에 해당하는 상수
gen ed_ym = ym(ed_y,ed_m)
gen dif_ym = ed_ym-ap_ym + 1
expand dif_ym , gen(dupo) // 데이터에 없는 월 생성
sort ap_y dupo
by ap_y (dupo),sort: replace ap_ym = ap_ym[_n-1] + 1 if dupo==1 // 생성된 관측치에 월 상수 지정
keep ap_ym dep_y_spo dep_y_chpa
gen dep_m_spo = dep_y_spo/12
gen dep_m_chpa = dep_y_chpa/12
gen year = year(dofm(ap_ym)) // 월 상수가 의미하는 연도 추출
gen mon = month(dofm(ap_ym)) // 월 상수가 의미하는 월 추출
order ap_ym year mon dep_y_spo dep_y_chpa dep_m_chpa
mat drop DepMat
mkmat ap_ym year mon dep_y_spo dep_y_chpa dep_m_spo dep_m_chpa , matrix(mymat_dep) // 데이터셋을 행렬로..
clear
* 입력하고자 하는 데이터셋 부르고
gen temp_ym = ym(year,mon) if bwon!=. // 데이터셋에 있는 연월을 상수로
gen dep_m_spo = .
gen dep_m_chpa = .
levelsof temp_ym , loc(myses) // 데이터셋에 있는 연월의 종류를 로컬로 지정
foreach mym of loc myses {
replace dep_m_spo = mymat_dep[`mym'-335,6] if temp_ym==`mym'
replace dep_m_chpa = mymat_dep[`mym'-335,7] if temp_ym==`mym'
}
// STATA에서는 1960년 1월 == 0 으로 설정되어 있음. 따라서 1988년1월을 1행으로 지정하고자 한다면, 여기에 335를 빼주면 된다.
// 이를 통해 생성되는 매트릭스, mymat_dep
// ap_ym year mon dep_y_spo dep_y_chpa dep_m_spo dep_m_chpa
// 1988년1월(336)~2018년3월(698)이 1행부터 363행까지 있음.
'MySTATA > 활용팁' 카테고리의 다른 글
가구 내 배우자 찾기(고급 매칭) (0) | 2023.07.20 |
---|---|
데이터 혹은 do 파일을 유니코드로 일괄 변환 (0) | 2017.04.11 |
불균형 패널을 균형패널로 만들기 (0) | 2017.03.23 |
inlist 그리고 inrange (0) | 2017.03.23 |
pdf 문자 인식(OCR) (0) | 2017.03.23 |