Category Archives: Study

[STATA] Variable1 Variable2 Variable3 등의 대해 이름 바꾸기

만약 자료가 아래와 같다면

T1 T2 T3 T4 T5 … T60

그리고 각 Variable들 마다 0과 1/5로 값들이 부여 되어 잇고

여기서 1/5를 1로 바꾸어 Dummy Variable을 만들어야 한다면?

그리고 새로운 Dummy Variable은 T1_C, T2_C, … T60_C의 명을 가지게 하고 싶다면…?

일일히 gen 과 replace 혹은 recode를 사용하여 편집하는 방법도 있지만 더 편한 방법이 존재한다.


명령어는 아래와 같다.

foreach i of var T*{

recode `i’ (0=0) (1/5=1), generate (`i’_C)
order `i’_C,after(`i’)

}

[STATA] Tabout 공부하기

예제 1:

Do File 1:

sysuse cancer, clear

la var died "Patient died"
la def ny  0 "No" 1 "Yes", modify
la val died ny

recode studytime (min/10 = 1 "10 or less months") (11/20 = 2 "11 to 20 months") (21/30 = 3 "21 to 30 months") (31/max = 4 "31 or more months") , gen(stime)
la var stime "To died or exp. end"

tabout stime died using table1.txt, cells(freq col cum) format(0 1) clab(No. Col_% Cum_%) replace

해설1:

>tabout stime died using table1.txt, cells(freq col cum) format(0 2) clab(No. Col_% Cum_%) replace

  • stime과 died 의 대하여 테이블을 만들어라 (tabout stime died)
  • 만들어진 테이블은 table1.txt로 추출하라 (using table1.txt)
  • 보여줄 항목은 “빈도수” “항목별 토탈 (즉 비율)” “누적비율” (cells(freq col cum))
  • 첫번째 항목(freq)의 대해서는 소수점 없이 보여줄 것 + 두번째와 세번째 항복의 대해서는 소수점을 두자리까지 보여줄 것
    (format (0 2))

    • 0c = 소수점 없이 세자릿수마다 “,” 찍기
    • 1p = 소수점 첫자리 까지 보여주고 % 단위로 표기
    • 만약 항목은 3개 인데 포멧에서는 2개만 설정 했다면 세번째 항목은 자동으로 두번째 항목과 동일
    • 만약 항목은 3개 인데 포멧에서는 4개를 설정 했다면 네번째 설정은 무시됨.
  • 보여줄 항목의 제목은 “No.” “Col_%” “Cum_%” 로 표기할 것
    (clab(No. Col_% Cum_%))
  • 만약 table1.txt라는 파일이 존재한다면 덮어쓰기 할 것 (replace)

 

예제2:

Do File 2:

sysuse nlsw88, clear

la var south "Location"
la def south 0 "Does not live in the South" 1 "Lives in the South"
la val south south

la var race "Race"
la def race 1 "White" 2 "Black" 3 "Other"
la val race race

la var collgrad "Education"
la def collgrad 0 "Not college graduate" 1 "College graduate"
la val collgrad collgrad

gen wt = 10 * runiform()

tabout south race collgrad [iw=wt] using  table2.txt, cells(freq row col) format(0c 1p 1p) clab(_ _ _) layout(rb) h3(nil) replace

해설2:

>tabout south race collgrad [iw=wt] using  table2.txt, cells(freq row col) format(0c 1p 1p) clab(_ _ _) layout(rb) h3(nil) replace

  • south, race와 collgrad의 대하여 테이블을 생성 (tabout south race collgrad)
  • importance weight를 wt를 기준으로 주어라 ( [iw=wt] )
    • iweights (Importance weights) are weights that indicate the “importance” of the observation in some vague sense. i weights have no formal statistical definition.
    • fweights (frequency weights) are weights that indicate the number of duplicated observations
    • pweights (sampling weights) are weights that denote the inverse of the probability that the observation is included because of the sampling design
    • aweights (analytic weights) are weights that are inversely proportional to the variance of an observation.
  • 만들어진 테이블은 table2.txt로 추출하라 (using table2.txt)
  • 보여줄 항목은 “빈도수” “열별 토탈” “누적비율” (cells(freq row cum))
  • 첫번째 항목은 소수점 없이 세자리마다 “,”로 표기 + 두번째 항목은 소수점 1자리와 % 기호 표기 + 세번째 항목은 소수점 1자리와 % 기호 표기 (format(0c 1p 1p))
  • 항목별 제목 표시하지 말기 (clab(_ _ _))
  • 레이아웃 정하기 (row block = rb) (column block = cb); (layout(rb))
  • 테이블 헤딩 없애기
    테이블 헤딩 사이즈 정하기 (h1~h3) 헤딩사이즈 표시는 html이나 tex로 추출할때만 적용가능
    (h3(nil))
  • 만약 table2.txt라는 파일이 존재한다면 덮어쓰기 할 것 (replace)

 

 

 

 

 

 

 

 

 

 

 

 

[STATA] 변수를 카테고리 변수로 Dummy Variable 재정립하기

우선 sysuse cancer의 자료를 사용해봄

> sysuse cancer, clear

보통 이런 데이터가 있고 이를 카테고리화 시켜

“10 or less months”
“11 to 20 months”
“21 to 30 months”
“31 to more months”

의 식으로 카테고리로 나누기 위해서는 Dummy Variable을 만들 듯이

> gen studyt=1
> replace studyt=2 if studytime>10
> replace studyt=3 if studytime>20
> replace studyt=4 if studytime>30

을 한 뒤 데이터에 레이블을 달았지만 Recode 라는 명령어를 사용하면 좀 더 간단하게 변환 가능하다.

> recode studytime (min/10=1 “10 or less months”) (11/20=2 “11 to 20 months”) (31/max=4 “31 or more months”), gen(stime)

 

 

 

 

[STATA 14] 깨진 한글 Label 살리기

이번에는 한국노동패널(KLIPS)를 이용하여 깨진 한글 레이블을 살려보자.

이번에 사용할 명령어는 “unicode”를 지원하는 STATA 버전 14부터 가능한 것으로 알고 있으니… 참고하자.

우선 한국노동연구원에서 KLIPS 자료를 다운받아 압축을 풀면 아래와 같다.

압축을 푼 뒤 아무자료나 STATA로 열어보면 열심히 타이핑된 Label이 모두 깨져 있는 것을 확인 할 수 있다. 처음 이 화면을 보면 정말… 충격과 공포…가….ㅠ

자 이제 인코딩이란 것을 하여 깨진 글자를 한글로 다시 맞추는 일을 해보자.

Step 1.

우선 로딩된 화면이 아무것도 나타나지 않도록 “clear” 명령을 써준다.

.clear

Step 2.

그 뒤 “cd” 명령어로 작업용 폴더를 설정해 준다

.cd “/Users/CharlieShin/Desktop/KLIPS/1-18차 무응답대체 데이터_20170417”

Step 3.

변환 할 언어 인코딩 설정 (대부분의 한글이 깨지는 경우는 euc-kr 이다)

.unicode encoding set euc-kr

Step 4.

이제 작업 폴더 안에 있는 모든 STATA 파일들 (.dta를 확장자로가진 모든 파일들)을 변환하도록 한다.

코드의 해석을 하자면 “모든 dta확장자를 가진 파일들을 euc-kr에서 utf-8형식으로 번역시켜라.” 정도?

.unicode translate *.dta, transutf8

약간의 시간이 흐르면

위와 같은 메시지가 뜬다.

빨간 글씨는 없는게 좋긴하겠지만…가끔 번역이 안되는 레이블이 한두개씩 있나보다.

아무튼 번역 안되는 레이블을 제외하고는 모두 번역이 되어 있으니 이제 파일을 열어보자.

이럴땐

.unicode translate *.dta, transutf8 invalid(ignore)

를 사용해주면 된다. Invalid한 레이블이 있을때 무시하라 라는 뜻이다.

아무튼 결과는 아래와 같다.

깔끔하게 번역 완료! ㅎ

[R] R에서 데이터베이스 불러오기

1. CSV 파일

>[이름]<-read.csv(“/파일주소/abc.csv”)    // 간단하게 불러오기
>[이름]<-read.csv(“/파일주소/abc.csv”, header=T, sep=”,”)    // DB의 첫 로우가 헤더가 되고, 컬럼세퍼레이터가 콤마가 되게 불러오기
>[이름]<-read.csv(“/파일주소/abc.csv”, fileEncoding=”euc-kr”)    // 폰트 인코딩을 지정하여 불러오기

2. TXT 파일

>[이름]<-read.table(“/파일주소/abc.txt”)    // 간단하게 불러오기
>[이름]<-read.table(“/파일주소/abc.txt”, header=T, sep=”,”)    // DB의 첫 로우가 헤더가 되고, 컬럼세퍼레이터가 콤마가 되게 불러오기
>[이름]<-read.table(“/파일주소/abc.txt”, fileEncoding=”euc-kr”)    // 폰트 인코딩을 지정하여 불러오기

3. 엑셀파일

“readxl” 플러그인을 이용한다.

>install.packages(“readxl”)   // 패키지 설치
>library(“readxl”)                  // 패키지 로딩
>[이름]<-read_excel(path=”/파일주소/abc.xlsx”, sheet=”시트명”, col_names=TRUE)           // 첫 로우가 헤더가 되게 엑셀 시트 불러오기

4. STATA 파일

“readstata13” 플러그인을 이용한다.

기존의 “foreign”플러그인으로는 STATA version 12까지 밖에 인식 하지 않음

>install.packages(“readstata13”)   // 패키지 설치
>library(“readstata13”)                  // 패키지 로딩
>[이름]<-read.dta13(“/파일주소/abc.dta”)