# 데이터 형태: 인구피라미드(population pyramid) 2.
# 완성된 코드문
**1. 5세 간격 변수 만들고
gen agez = int(age/5)*5, before(age)
**2. 5세단위 인구합산 및 만명 단위로 변환
foreach myvari of numlist 2020(40)2060 {
by esthypo gender agez (age), sort: replace yr`myvari' = sum(yr`myvari')
by esthypo gender agez (age), sort: replace yr`myvari' = yr`myvari'[_N]
replace yr`myvari' = yr`myvari'/10000 if gender=="남자"
replace yr`myvari' = -1*yr`myvari'/10000 if gender=="여자"
}
by esthypo gender agez (age), sort: keep if _n==1 // 연령대별 자료 하나만
**3. 연령대 집단별 라벨붙이기
lab def lbla 1000 "그냥"
forvalues ii = 0(5)95 {
lab def lbla `ii' "`ii'~`=`ii'+4'세" , add
}
lab def lbla 100 "100세이상", add
lab val agez lbla
**4. 연령대 집단 표시 일련번호
by esthypo gender (agez age), sort: gen agegrp = _n // 간격을 밀착되도록
**5. 중앙축에 사용할 변수 생성
gen myzero=0
**6. 중앙간격 띄우기 위해서 값을 조정함.
loc ww = 20
foreach myvar of varlist yr2020 yr2060 {
replace `myvar' = `myvar' + `ww' if gender=="남자"
replace `myvar' = `myvar' - `ww' if gender=="여자"
}
**7. 중앙을 흰색으로 만들어줄 변수 생성
gen mywhite = `ww' if gender=="남자" // 선을 가려줄 변수
replace mywhite = - `ww' if gender=="여자"
**8. 그래프
#delimit ;
twoway
(bar yr2020 agegrp if gender=="남자", horizontal)
(bar yr2020 agegrp if gender=="여자", horizontal)
(bar mywhite agegrp if gender=="남자", horizontal bcolor(white) )
(bar mywhite agegrp if gender=="여자", horizontal bcolor(white) )
(scatter agegrp myzero if gender=="남자", msymbol(none) mlabel(agez) mlabcolor(black) mlabposition(0))
if esthypo=="중위 추계(기본 추계: 출산율-중위 / 기대수명-중위 / 국제순이동-중위)" & inrange(age,0,100) ,
xtitle("단위: 만명") scheme(white_viridis)
legend(order(1 "남자" 2 "여자") ring(0) position(1))
xlabel(-250 "250" -100 "30" 0 100 250) yscale(off) ;
#delimit cr
'MySTATA > 그래프 다루기' 카테고리의 다른 글
텍스트 + 음영 넣기 (38개 국가 고령화 비교) (0) | 2021.08.09 |
---|---|
인구피라미드(population pyramid) 4. (0) | 2021.08.04 |
인구피라미드(population pyramid) 2. (0) | 2021.08.04 |
인구피라미드(population pyramid) 1. (0) | 2021.08.04 |
비교: graph scheme (0) | 2021.08.02 |