Monthly Archives: May 2017

[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”)

 

 

 

 

 

[R] 맥OS에서 R을 사용하기 위한 몇가지 노력

1. 몇몇 패키지들은 .EXE파일로 되어 있어 윈도우에서만 작동가능하다.

이를 해결해 줄 수 있는 것이 XQuartz 이다.

예 – BEFORE)
>library(rgl)
Error: package or namespace load failed for ‘rgl’:
.onLoad failed in loadNamespace() for ‘rgl’, details:
call: dyn.load(file, DLLpath = DLLpath, …)
error: unable to load shared object ‘/Library/Frameworks/R.framework/Versions/3.4/Resources/library/rgl/libs/rgl.so’:

dlopen(/Library/Frameworks/R.framework/Versions/3.4/Resources/library/rgl/libs/rgl.so, 6): Library not loaded: /opt/X11/lib/libGLU.1.dylib
Referenced from: /Library/Frameworks/R.framework/Versions/3.4/Resources/library/rgl/libs/rgl.so
Reason: image not found

예 – AFTER)

> library(rgl)
> example(plot3d)

plot3d> open3d()
glX
1

plot3d> x <- sort(rnorm(1000))

plot3d> y <- rnorm(1000)

plot3d> z <- rnorm(1000) + atan2(x, y)

plot3d> plot3d(x, y, z, col = rainbow(1000))

 

2. .csv확장자 파일의 한글이 깨질 때

위와 같이 엑셀에서부터 깨지는 .csv 파일 대처법

빈 엑셀 파일을 불러 온 후 Data – From Text를 선택

원하는 데이터를 로딩

파일 오리진(File Origin)을 UTF-16이라던지 UTF-8이라던지 바꾸라는 말이 있지만 나의 데이터의 경우엔 “Korean (Windows, DOS)” 로 변경 시 제대로 한글이 나왔다.

이렇게~ 다음 누르고

Delimiters 에 “Comma”도 체크 후 “Finish”

“OK”

파일이 잘 인코딩 되어 나왔다.

원하는 이름으로 바꾸고 Save As

저장 형식은 UTF-16 Unicode Text (.txt)

 

이제 R스튜디오로 가보자

> excel1<-read.csv(“/저장폴더/example_studentlist.txt”, fileEncoding = “UTF-16”)
> excel1

헤더는 “.” 으로 구분되어 있고

컬럼은 “\t”로 구분되어 있다.

이를 해결하기 위해서는

> excel1<-read.csv(“/저장폴더/example_studentlist.txt”, header=T, sep=”\t”, fileEncoding = “UTF-16”)
> excel1

위와 같이 명령어를 더해준다.

(header=T –> Header True 즉 Header가 있다. 없다면 header=F)

(sep –> Separator를 설정)

R로 잘 불러와 졌다.

 

3. 보다 쉽게 한글 CSV 파일 불러오기

> list<-read.csv(“/저장폴더/example_studentlist.csv”, header=T, sep=”,”, fileEncoding = “euc-kr”)
> list

엑셀을 거치지 않고 인코딩만 바꿈으로서 로딩 완료!