본문 바로가기

MySTATA/그래프 다루기

인구피라미드(population pyramid) 3.

인구피라미드: 한국, 2020년 

# 데이터 형태: 인구피라미드(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