본문 바로가기

MySTATA/그래프 다루기

line & scatter & connected 결합

<한국 여성의 연령별 고용률: 2020년, OECD>

# 한국 여성의 연령별 고용률을 OECD와 비교하고, OECD 내 국가간 순위 

# dataset 개요

<2020년 39개 국가, 연령별(5세단위)> 

* 39개 국가 각각에 대해서 코드문 작성하면 길이도 길어지고 나중에 수정하기 어려움

* 한국과 OECD == line

* 다른 국가들 == scatter 

levelsof lcode if ~inlist(lcode,35,40) , loc(ctrs)
   loc clist = ""
   foreach cc of loc ctrs {
      loc clist = "`clist'  (scatter empr myage if lcode==`cc', msize(vsmall) )"
   }

 

* 한국의 OECD 내 순위 파악하고, 한국의 순위만 그래프에 넣기 

by gender ages (empr) , sort: gen kn = _N - _n + 1 
gen kpos = kn if lcode==35

 

* 문자로 된 x축(ages)을 숫자로 전환하고, 내용을 값라벨로 지정

// why? stata의 twoway를 이용하기위해.

gen myage = real(substr(ages,1,2))
replace ages = subinstr(ages,"to","~",.) + "세" if myage < 65 
** x-축 라벨 
lab def lblg 9999 "미정" 
levelsof ages , loc(vl)
foreach mys of loc vl {
  su myage if ages=="`mys'"
  lab def lblg `r(mean)' "`mys'" , add 
}
lab val myage lblg 

 

** 완성된 코드문 

gen myage = real(substr(ages,1,2))
replace ages = subinstr(ages,"to","~",.) + "세" if myage < 65 
** x-축 라벨 
lab def lblg 9999 "미정" 
levelsof ages , loc(vl)
foreach mys of loc vl {
   su myage if ages=="`mys'"
   lab def lblg `r(mean)' "`mys'" , add 
}
lab val myage lblg 

save mydata.dta, replace 

use mydata.dta, clear 
   keep if country=="OECD" 
save mydata1.dta, replace 

use mydata.dta, clear 
   drop if country=="OECD"  
   by gender ages (empr) , sort: gen kn = _N - _n + 1 
   gen kpos = kn if lcode==35
append using mydata1.dta 

** 국가들 차트 
levelsof lcode if ~inlist(lcode,35,40) , loc(ctrs)
loc clist = ""
foreach cc of loc ctrs {
   loc clist = "`clist'  (scatter empr myage if lcode==`cc', msize(vsmall) )"
}

foreach MyPerson in Allpersons Men Women {
#delimit ;
twoway 
   (line empr myage if lcode==40, lpattern(dash)  lwidth(medthick) lcolor(green) ) /* OECD */
   (connected empr myage if lcode==35, msymbol(none) mlabel(kpos) mlabsize(small) mlabcolor(red) mlabposition(4) lpattern(solid) lwidth(medthick) lcolor(red)  ) /* 한국 */ 

 

   `clist'    /*  다른 모든 국가들  */     if gender=="`MyPerson'"     , 

   xlabel(#10, valuelabel ticks labsize(small))
   ylabel(0(10)100,angle(0) labsize(small)) 
   legend(order(1 "OECD" 2 "한국") position(6)  ring(0) rows(1) size(medsmall))   
   graphregion(col(white) ) plotregion(margin(medium))
   xtitle("")   ytitle("")    scheme(sj)  ; 
#delimit cr 

graph export "$PnL_Anal\01_그래프\gr04_OECD_연령대비교_`MyPerson'.png", as(png) width(1200) replace

}