그래프 그리기 03:= 여러 집단별로 동일한 그래프를 반복해서 그리기

/*
원본 데이터는 A열의 대분류(종사상지위,근로형태,산업 등)와 B열의 중분류가 각 해당 대분류별로 구성된 항목별로 2001년~2012년까지의 값이 들어있는 자료이다(제공:= 신우진).
*/


// 이런 자료를 갖고서 어떤 그래프를 그려야 할까?^.^
// 좀 더 구체적으로 말하면, A열의 분류(근로형태별, 산업별, 종사상지위별 등)로 각각의 그래프를 B의 중분류 항목을 기준으로 연도별 추이를 그려야 하는 것이 오늘의 작업...


// 오늘의 작업을 정리하면, 
1. A열의 항목별로 별도의 그래프를 그려야 한다. 다만, 그래프의 형식은 다행히도 동일하다. 
2. 각 그래프는 B의 항목을 기준으로 그린다. 즉, 각 그래프의 범례(legend)는 B열의 항목으로 한다. 
// 만일 이 작업을 하나하나씩 그린다면, 시간이 많이 걸리고 번거로운 것 당연!! 

// 자! 시작해 볼까요^^
// 먼저, 스타타로 그래프를 그릴려면, 위의 원본을 다음과 같은 형태로 일단 변환하는 것이 필요합니다.
   * 오늘의 작업은 그래프 그리기이니, 이러한 형태로 변환하는 것은 나중에 기회가 되면 설명할께요.  여기에 더 관심이 있는 분은 import excel과 reshape 명령어를 공부하면 될 겁니다....

* 자! 다시 한 번 이번 작업에서의 핵심을 말하면 다음과 같습니다. 
1. A열의 항목과 B의 항목을 각각 하나의 목록으로 받아내서 사용할 수 있어야 한다.
2. A와 B의 각 항목명을 문자로 인식, 즉 항목명은 물론 각 항목명 시작과 끝부분에 인용부호를 그대로 인식하여 사용할 수 있어야 한다. 구체적으로 말하면, "항목명" 의 형태를 살리면서 목록을 만들수 있어야 한다(스타타에서는 이게 생각보다 힘들다..물론, 알면 쉽지만 모르면 ㅠ.ㅠ)


levelsof A, loc(grpA)  // 대분류 항목 목록 만들고

foreach Litem of loc grpA {                // 대분류 항목 목록 내 항목별 순서대로 루프 시작
   levelsof B if A == "`Litem'", loc(grpB) // 중분류 항목 서브 목록 만들고
   loc nstr: word count `grpB'             // 중분류 항목의 갯수를 알아내고

   lab def aa 0 ""  // 문자로 된 중분류항목값을 숫자로 변환하고, 원래의 값을 value label 만들기 위한 라벨정의
   gen aa:aa = .    // 문자로 된 중분류항목값을 숫자로 변환한 값을 담을 임시 변수

   forvalues ii = 1(1)`nstr' {       // 중분류 항목 서브 목록을 이용해, value label 만들고..
      loc thisitem: word `ii' of `grpB'
      replace aa = `ii' if B == "`thisitem'"
      lab def aa `ii' "`thisitem'", add 
   }

* 주황색이 핵심!!
  loc MyTwoway = ""
  loc MyLegend = ""
  forvalues ii = 1(1)`nstr' {
    loc thisitem: word `ii' of `grpB'
    loc MyTwoway = "`MyTwoway'" +  "(connected rate yr if aa == " + "`ii'" +  ")" 
    loc MyLegend = `" `MyLegend' `ii' "`thisitem'" "'
    di "`MyTwoway'"   // "확인용 
    di `"`MyLegend'"' // "확인용 
  }

#delimit ;
twoway `MyTwoway' ,    
by(mytype)  by(, note("")) legend(order(`"`MyLegend'"')  rows(1))  
   ytitle("저임금비중(%)")
   ylabel(0(10)`vmax', angle(horizontal))
   xtitle("")
   xlabel(2001(3)2011 2012 , labsize(medium)  )
    scheme(sj)  ;
#delimit cr 

  graph export ".........\인적특성_`Litem'.png", replace 
  drop aa  // 임시변수 삭제 
  label drop aa  // 임시라벨도 삭제

}  // 대분류 항목 목록 내 항목별 순서대로 루프 끝. ^^ 

* 이제 그 결과를 보면, ^^
<고용형태별 비중>
<근로형태별 비중>
<고용형태와 종사상지위별 비중>


* 이해를 위해 부연설명을 하면, 
스타타에서 twoway그래프를 그리고자 하면, 아래와 같이 각 항목별로 그래프를 지정하는데, 
 twoway  (connected var_B yr)
(connected var_C yr)
(connected var_D yr)
(connected var_E yr),  
....  legend(order(1 "전체근로자" 2 "비임금근로자" 3 "임금근로자" ) rows(1))

MyTwoway 로컬변수의 내용은 위에서 빨간색 부분에 해당하는 것이고, 

MyLegend 로컬변수의 내용은 주황색 부분에 해당하는 것입니다. ^^










댓글

이 블로그의 인기 게시물

pdf 문자 인식(OCR)

그래프 그리기 05:= EU-15 국가들의 GDP 대비 사회지출 비중과 사회지출 대비 사회보장기여금의 비중:= 4사분면 만들기

그래프 그리기 06:= 등탄력적 효용함수 그래프 그리기