12월, 2013의 게시물 표시

그래프 그리기 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)  // 대분류 항목 목록 만들고 fore...

서명

이미지

그래프 그리기 02:= 막대(bar) 그래프

이미지
* 스타타에서 막대그래프는 약간 불편하다. 두 변수를 서로 다른 막대로 그리기도 어렵고, 값을 그래프 안에 넣기도 어렵다... ㅠ.ㅠ // 오늘 그래프를 만들 데이터는 다음과 같다. // yr을 x축, 나머지 세변수를 y축... // 세 변수 중 B, C는 막대그래프 좌축 // D는 선연결그래프로 우축으로... // 이 경우, 대부분은 이렇게 그리겠죠.... #delimit ; twoway (bar var_B yr) (bar var_C yr) (connected var_D yr, yaxis(2) mlabel(var_D)  mlabposition(12))   ,    ytitle("근로자수(천명)")    ytitle("비정규직 비중(%)", axis(2))    ylabel(0(2000)20000, angle(horizontal))     ylabel(0(5)40, axis(2) angle(horizontal) )    xtitle("")    xlabel(2001(1)2012 , labsize(medium) alternate )    legend(order(1 "`mylab_B'" 2 "`mylab_C'"  3 "`mylab_D'" ) rows(1))     scheme(sj)  ; * 그래서 다음과 같이 해보죠... format var_D %16.1f                // 비율을 소수점 1자리수로... format var_B var_C %16.0fc     // 1000단위로 콤마를 넣고.. // 핵심... gen yr2 = yr + 0.2 gen yr3 = yr - 0.2 #delimit ; twoway...

그래프 그리기 01

이미지
  * 이런 그래프를 그리는 방법.. #delimit ; ** 1.1. 소득계층/급여종별 가입개월수 ; twoway   (line myval sim_yy if vartype == 6 &  qtype == 1, sort lwidth(thick) lcolor(gs10)   lpattern(dash))          (line myval sim_yy if vartype == 6 &  qtype == 2, sort lwidth(thick) lcolor(gs14)  lpattern(solid))          (line myval sim_yy if vartype == 6 &  qtype == 3, sort lwidth(thick) lcolor(gs10)  lpattern(solid))          (line myval sim_yy if vartype == 6 &  qtype == 4, sort lwidth(thick) lcolor(gs5)   lpattern(solid))          (line myval sim_yy if vartype == 6 &  qtype == 5, sort lwidth(thick) lcolor(black) lpattern(solid))          if bentype != 99            , by(bentype,rows(1))  by(, note(""))    ytitle(가입개월수)    ylabel(120(60)360, angl...

일정 범위 혹은 특정 값들의 목록을 조건 걸기

// 일정 범위 혹은 특정 값들의 목록을 조건 걸기 * inrange 와 inlist // 많은 사람들이 이렇게 쓰지요?! 명령구문   if var_a >= 1 & var_a <= 10 // 그런데 이렇게 하면 편하죠^^ 명령구문   if inrange(var_a,1,10) // 아니면, 이렇게 할 수도 있습니다. 물론, 지금은 inlist가 별로 소용없어 보이지만, 일정 범위가 아니라면, inlist처럼 목록을 조건걸 때는 너무 편하겠죠^^; 명령구문   if inlist(var_a,1,2,3,4,5,6,7,8,9,10)

특정 변수의 값들을 다른 변수의 값 라벨로 사용

이미지
* 변수B에 있는 연령대를 의미하는 문자값들을 u5_age 변수에 있는 1~10까지의 값에 대한 값라벨로 사용하고자 하는 경우         lab def lbl_age 0 ""   // 일단 하나 값라벨을 정의하고...    forvalues ii = 1(1)10  {     loc mystr = B[`ii']      // 각 행에 있는 값을 로컬로 담아두고       lab def lbl_age `ii' "`mystr'" , add   // 숫자와 함께 값라벨을 계속 추가하자..   }     lab val u5_age lbl_age   // 정의한 라벨을 적용하자.

불균형 패널을 균형패널로 만들기

이미지
* 다음과 같은 자료가 있습니다. // 1~5까지의 값을 갖는 old_Act의 경우 일부 집단에서 특정 값이 빠진 경우.  fillin gend agez old_Act   // 빠진 것을 채우고 // 문제는 새롭게 생성한 관측치에 특정 값을 넣어야 함 // old_Act 값에 따라, 그 값이 포함된 변수에만 1을 넣고 다른 경우에는 0을 넣어봅니다.     replace _fillin = old_Act if _fillin == 1     forvalues ii = 1(1)5 {         replace trate`ii' = (_fillin == `ii') if trate`ii' == .      } // 이렇게 한 줄을 줄여도 되겠죠...^^~     forvalues ii = 1(1)5 {         replace trate`ii' = (old_Act == `ii') if trate`ii' == .      }

변수 첫행에 있는 값을 변수명으로 전환

  ** 첫행의 값 받아서 목록으로 만들기     loc mystrz ""   foreach myvar of varlist D-AE {     loc mystr = `myvar'[1]                // 첫행의 값 받기     loc mystrz: list mystrz | mystr     // 받은 값들을 목록으로 만들기   }   ** 목록 내 한글을 영문으로 바꾸기: 한글은 변수명으로 사용할 수 없자나~~ ㅠ.ㅠ   local mystrz: subinstr local mystrz "사업장" "wp", all   local mystrz: subinstr local mystrz "지역" "lp", all   local mystrz: subinstr local mystrz "임의계속" "vcp", all   local mystrz: subinstr local mystrz "임의" "vp", all   ** 목록을 변수이름으로 전환하기     loc ii 0   foreach myvar of varlist D-AE {     loc ++ii     loc mystr: word `ii' of `mystrz'     gen `mystr' = real(`myvar')   }   drop D-AE

변수 안에 있는 값들을 목록으로 받아내기

foreach mysex in 1 2  {  // 성별 루프    forvalues myeact = 11(1)15   {  // 종사상지위별 루프         // 성과 종사상지위에 따른 집단 내 구성원들의 연령구성은 다양할 것임.       // 그래서 각 집단 내 구성원들의 연령 목록이 필요함^^       levelsof realage if gend == `mysex' & eactpp == `myeact' , local(myages)       foreach myage of local myages  { // 연령          svy: mean pen_part if gend == `mysex' & eactpp == `myeact' & realage == `myage'               }  // 연령    }  // 종사상지위 }  // 성별

균등(uniform) 확률 뿌리기

// 0~1 사이의 난수를 생성해서 특정 값 뿌리기 // 일단 스타타 본래의 기능으로 불가능함. // 그래서...... ^.^        qui  gen rand = runiform() if gend == 1 & age == 18  // 성연령별로 0~1 사이의 난수생성        qui  replace nps_pmon_yr =          ///                         cond(rand <= 0.12, 1 ,   ///                         cond(rand <= 0.21, 2 ,   ///                         cond(rand <= 0.34, 3 ,   ///                         cond(rand <= 0.44, 4 ,   ///                         cond(rand <= 0.49, 5 ,   ///                         cond(rand <=...