
오늘 작업할 스타타 파일은 위와 같다.
- 기업명과 직종은 코드화 되어 있으며, 직렬 및 직군은 해당 회사에 한정되어 string으로 입력되어 있다.
결과 미리보기:

이 중 기업코드 2, 3, 4 에만 한정하여 총 인원 및 직종의 개수, 직렬의 개수, 직급의 개수를 알 수 있는 표를 뽑아보자.
반복문을 쓰는 이유…
- 물론 기업수가 3개 밖에 안되면 궂이 반복문이나 메트릭스를 쓰지 않아도 어렵지 않게 뽑아 낼 수 있지만…
- 최근 360개의 기관에 관한 개인 데이터를 만질일이 있었는데…
- 총 인원대비 직종수를 비교해가며… 원자료의 오류를 찾아내는 일을 하고 있다.
- 그럴땐 이렇게 기업코드를 기준으로 excel로 추출한 뒤 vlookup을 사용하여 비교하는게 “매우 몹시… 혼또니…” 손으로 하는 것보다 빨랐다…
1. Working Directory 지정
cd "W:\SATA"
2. Summary용 메트릭스 생성
mat mccode = (0)
mat mfreq = (0)
mat mj1 = (0)
mat mj2 = (0)
mat mj3 = (0)
- 0의 값을 하나 가지고 있는 [1, 1] 메트릭스를 5개 생성했다.
- 각각의 이름은 :
- mccode – 기업코드를 저장할 메트릭스
- mfreq – 기업내 총 인원 수를 저장할 메트릭스
- mj1 – 기업별 총 직종 개수를 저장할 메트릭스
- mj2 – 기업별 총 직렬 개수를 저장할 메트릭스
- mj3 – 기업별 총 직군 개수를 저장할 메트릭스
3. 반복문을 사용하여 메트릭스에 차곡차곡 정보 쌓기
foreach num of numlist 2 3 4 {
display `num'
tab 기업코드 if 기업코드==`num', nol matcell(freq) matrow(ccode)
mat mccode = mccode\ccode
mat mfreq = mfreq\freq
tab 직종 if 기업코드==`num'
mat j1 = r(r)
mat mj1 = mj1\j1
tab 직렬 if 기업코드==`num'
mat j2 = r(r)
mat mj2 = mj2\j2
tab 직군 if 기업코드==`num'
mat j3 = r(r)
mat mj3 = mj3\j3
}
해설
foreach num of numlist 2 3 4 {
- `num’ 이라는 변수를 2, 3, 4로 바꾸어 가며 반복문 시작
display `num'
- 2, 3, 4 가 `num’에 제대로 들어갔는지 확인
tab 기업코드 if 기업코드==`num', nol matcell(freq) matrow(ccode)
- 기업코드가 `num’ 인 기업을 조건으로 기업코드에 대해 tabulate 명령 실행
- nol –> 기업코드로 레이블링이 define 되어 있다면 그냥 숫자로 보여줄 것
- matcell(freq) –> 테이블의 행 정보, 즉, 기업의 개인정보 관측치 (i.e. 기업내 사원수)를 freq라는 메트릭스로 저장
- matrow(ccode) –> 테이블의 열 정보, 즉, 기업코드를 ccode라는 메트릭스로 저장
- 이때 메트릭스 ‘freq’와 ‘ccode’는 한 한가지의 기업에 대하여 if 기업코드==`num’ 에 대하여 검색한 결과이기때문에 [1, 1] 메트릭스로 생성됨
mat mccode = mccode\ccode
mat mfreq = mfreq\freq
- ccode를 미리 만들어둔 mccode 아래 붙힘
- freq를 미리 만들어둔 mfreq 아래 붙힘
- 첫번째 루프를 돌릴때 mccode는 [1, 1]메트릭스에서 [2, 1] 메트릭스가 됨
- 두번째 루프를 돌릴때 mccode는 [2, 1]메트릭스에서 [3, 1] 메트릭스가 됨
- 모든 루프를 다 돌리면 mccode는 아래와 같이 [4, 1]이 됨

tab 직종 if 기업코드==`num'
mat j1 = r(r)
mat mj1 = mj1\j1
- 여기서는 직종을 tabulate 한 결과보다
- 직종을 tabulate한 뒤 스케일러 r(r) 변수에 꼿히는 관측치에 더 관심이 있음

- 기업코드=2의 직종은 11, 23, 25, 27로 총 4개가 존재함….
- di r(r)로 4개가 존재하는지 확인가능
- mat j1 = r(r) –> r(r)의 값(4)을 j1이라고 하는 메트릭스에 넣음 이때 메트릭스 사이즈는 [1, 1]
- mat mj1 = mj1\j1 –> 메트릭스 j1을 메트릭스 mj1아래 넣기…
- 위 mccode와 같은 원리로 첫번째 루프때 mj1 메트릭스는 [2, 1]이 되며 최종적으로는 [4, 1] 메트릭스가 됨
4. 최종적으로 만들어진 메트릭스 엑셀로 보내기
putexcel set analysis_table, replace
putexcel A1=mat(mccode) B1=mat(mfreq) C1=mat(mj1) D1=mat(mj2) E1=mat(mj3)
putexcel A1=("기업코드") B1=("총인원") C1=("직종수") D1=("직렬수") E1=("직급수")
putexcel close
- working directory에 analysis_table.xlsx 파일을 만듬
- 엑셀 A1 셀에 mccode 메트릭스 [4, 1]를 삽입 –> 이러면 A1 부터 A4까지 메트릭스 안의 숫자가 삽입됨
- 엑셀 B1 셀에 mfreq 메트릭스 [4, 1]를 삽입
- 엑셀 C1 셀에 mj1 메트릭스 [4, 1]를 삽입
- 엑셀 D1 셀에 mj2 메트릭스 [4, 1]를 삽입
- 엑셀 E1 셀에 mj3 메트릭스 [4, 1]를 삽입
- 첫번째 row값은 모두 0이 될 것임… (생성을 그렇게 했으니까… 초반에…)
- 이 0값을 각각 “기업코드” “총인원” “직종수” “직렬수” “직급수”로 대체함