통계분석 이전에 자료가 제대로 마련되어 있지 않으면 분석을 할 수 없으므로 데이터 관리에 많은 시간을 할애하고자 한다.
Stata에서 파일의 종류
*.dta 데이터 파일
*.do 일련의 명령어들을 모은 일종의 매크로
*.ado 프로그램 파일.
*.sthlp STATA 도움말 파일
*.gph 그래프
*.scheme 그래프 모양 설정 파일
*.smcl STATA 로그 파일
STATA는 대소문자를 구분한다. 명령어는 극소수의 경우를 제외하고 무조건 소문자로만 써야 한다.
1. 자료 불러오기
앞에서 맛보기로 자료를 불러올때 webuse 파일명.dta를 사용했다.(*.dta 형식의 데이터 파일은 .dta 생략해도 무방하다.)
Stata를 설치했을 때 기본적으로 깔려있는 자료를 불러올때 sysuse를 사용한다. 앞에서 본인 컴퓨터에 설치된 Stata에 auto.dta가 있으면 다음처럼 불러올 수 있다.
sysuse auto.dta
또는 use auto.dta를 써도 된다.
Stata 웹사이트에는 잘 알려진 여러 자료가 있다. 이런 경우 webuse 명령어를 사용한다. 앞의 auto.dta 자료도 stata 웹사이트에 있으므로
webuse auto.dta
위와 같이 치면 stata 웹사이트에 있는 자료를 불러올 수 있다.
다른 곳(예를 들어 http://www.ats.ucla.edu/stat/stata/dae/binary.dta)에 있는 자료를 불러오고자 할 때는
이렇게 하면 된다.
use http://www.ats.ucla.edu/stat/stata/dae/binary.dta, clear
주의깊은 사람은 뒤에 ,clear를 보았을 것이다. 왜 이랬을까?
stata는 spss처럼 기본적으로 한 자료밖에 다루지 못한다. 기존의 데이터가 메모리에 남아 있는 상태에서 새로운 자료를 그냥 불러올 경우 오류메시지를 낸다. 이럴 때 ,clear를 뒤에 써 줌으로써 기존 자료를 메모리에서 지우고 새 자료를 기록한다.
실질적으로 작업할 경우 꼭 stata 프로그램 폴더에다 자료를 넣고 할 수도 있지만, 대개의 경우 특정 자료 폴더를 만들고 그곳에서 불러오는 게 일반적으로 편하다.
use [파일 경로] ,clear
그런데 매번 파일 경로를 치면 귀찮은 일이다. 다음 명령어는 자신의 폴더를 사전에 지정해 준다.
cd [파일경로]
예를 들어 내가 C:/docs/에 데이터를 저장하고 그곳에서 계속 불러오고자 할 때는
cd c:/docs/
로 친 다음, use [파일명]으로 간단히 불러올 수 있다.
(*stata는 한글을 잘 인식하지 못한다. 따라서 경로를 지정할 때, 바탕화면에 있는 경로를 지정할 경우 오류가 생길 수 있다. 변수값이나 변수명은 물론 한글을 인식하지 못한다.)
만약 데이터 파일을 인식하지 못한다면 cd 또는 pwd를 쳐서 위 경로로 지정이 되어있는지 확인할 수 있다.
Stata는 .txt .csv 파일 등의 텍스트 파일도 읽을 수 있다. 예를 들어 다음과 같다.
insheet using "[파일경로/파일명]", clear
(2014. 11. 23 추가)
Stata12 이후 txt나 csv파일을 읽는 명령문은 import delimited이다(그러나 기존 명령문도 작동한다.) 예를 들어 쉼표로 구분된 데이터 "data.csv"를 읽는 명령문은 다음과 같다.
import delimited data, rowrange(2:7) clear
여기서 옵션 rowrange는 첫 행에 변수명이 있으므로 두번째 행에서 7번째 행의 데이터를 읽도록 지정한다.
.txt 파일의 경우 구분자를 어떻게 지정해 주느냐에 따라 읽어들이는 방식이 바뀌므로 주의할 필요가 있다. 예를 들어, 탭으로 구분된 데이터 auto.txt를 읽는 명령문은 다음과 같다.
import delimited auto.txt, delimiters(tab, collapse) varnames(1)
여기서 탭 구분자를 의미하는 "tab" 옆의 collapse 옵션은 이후 연속되는 구분자들을 한 구분자로 인식하도록 강제한다. 만약 구분자가 "AA"와 같이 둘 이상의 문자일 경우 collapse를 지정하지 않으면 변수 사이에 빈 열이 생길 수 있다. 또 다른 방법은 delimiter("AA", asstring)로 두 문자 "AA"가 한 구분자로 사용된다고 지정할 수 있다. 구분자를 지정하는 옵션 delimiter의 경우, 탭 외에 다른 구분자 예를 들어 ;, " "(공백)등이 사용될 경우 delimeter(";")나 delimeter("")를 사용할 수 있다. varnames(1)은 첫 행에 변수 이름이 있음을 지정해 주는 것으로 varnames(nonames)는 이름이 없음을 의미한다. rowrange(1:30) 또는 colrange(1:5)같이 옵션을 주면 읽어들이는 데이터의 행 범위와 열 범위를 지정할 수 있다.
그러나 stata는 엑셀 파일 자체를 읽지 못한다. 직접 드래그해서 복사하거나 변환 프로그램을 이용하거나 txt, csv 형식으로 저장하여 열어야 한다.
(2014. 11. 23일 추가내용)
12버전부터 Stata에서도 엑셀 파일을 읽어들이거나 내보내기할 수 있다. 그러나 엑셀 파일에 한글이 들어있는 경우 깨져 나올 수 있으므로 한글 텍스트 데이터를 다룰 때 주의해야 한다.
엑셀 파일 data.xlsx의 시트 'table'에서 셀 범위 B2:J50에 있는 데이터를 읽어들이고 싶을 때, 명령문은 다음과 같다.
import excel using data.xlsx, firstrow sheet("table") cellrange(B2:J50) clear
여기서 쉼표 뒤의 옵션 firstrow는 첫 행에 변수 이름이 있음을 알려주는 것이다. clear는 이전 데이터가 메모리상에 있을 때 이를 지우고 엑셀의 데이터를 불러온다. cellrange()를 지정하지 않으면 Stata는 자동으로 A1부터 데이터를 읽는다. 옵션 allstring은 읽어들이는 데이터의 모든 변수들을 문자 변수로 인식한다.
물론 메모리상의 데이터를 다시 엑셀로 내보내기하는 것도 가능하다. 예를 들어 작업한 데이터를 work1129.xlsx라는 이름의 시트 "data1"에 저장하고 싶을 때 명령문은 다음과 같다.
export excel using work1129.xlsx , sheet("data1")
만약 메모리상의 데이터에 있는 변수들 중, var1, var2, var3만 work1129.xlsx 로 저장하고 싶다면 다음과 같이 하면 된다.
export excel var1 var2 var3 using work1129.xlsx , replace
쉼표 뒤의 옵션 replace는 기존에 work1129.xlsx라는 파일이 있을 경우 이를 새로 저장하는 파일로 대체한다는 것을 의미한다. 만약 work1129.xlsx라고 하지 않고 단순히 work1129라고 하면 .xls 형식으로 파일이 저장된다.
Stata는 5,000개 이상의 변수도 다룰 수 있지만 엑셀의 경우 2003까지(.xls)는 256개 열과 65,536행 , 2007이후(.xlsx)는 16,384개 열의 1,048,576 행까지 다룰 수 있다. 따라서 내보내기하는 파일의 형식에 따라 일부 데이터만 저장되는지 확인해야 한다.
또한 읽어들이는 파일에서 한 열의 데이터값 하나라도 문자형 변수가 있다면 당연히 모두 문자형 변수로 인식하게 된다. 예를 들어 "-", "+", "*" 같은 값들이 들어있다면 그 열의 나머지 데이터값들이 숫자변수라도 문자로 인식한다.
더 자세한 내용은 다음 명령문을 쳐서 얻을 수 있다. 여기 나온 내용들도 Stata의 도움말에서 얻은 것이다.
help import excel
*기타 다른 통계패키지의 자료를 읽는 경우
spss나 sas의 경우, 자료를 xpt 형식으로 내보낼 수 있다. 이를 이용하면 앞의 패키지에서 자료를 xpt 형식으로
변환하면 stata에서 읽을 수 있다.이 경우 fdause 명령문을 사용하면 된다.
fdause "c:\docs\example1.xpt", clear
이 경우 변수이름, 레이블 정보를 그대로 가져올 수 있다는 장점이 있다.
*데이터 저장 및 보내기
데이터 저장하기는 save [파일명]으로 저장할 수 있다.
이때 불러온 데이터와 같은 파일명을 쓰는 경우 작업에 의해 변형된 데이터를 그대로 덮어쓸 수 있는 위험이 있다.
작업하거나 입력한 자료를 텍스트파일 형식으로 보내고자 할 때, outfile이라는 명령어를 쓴다.
outfile using "c:\docs\dataexpt.txt", nolabel replace
여기서 nolabel이란 옵션을 달았는데 왜 그럴까? 스태타의 경우 데이터 값에 라벨이 있을 때 txt 파일로 그냥 보내면 라벨값이 그냥 변수값으로 되어버린다. 그래서 nolabel 옵션으로 지운 것이다. 만약 stata 데이터 파일을 엑셀 스프레드쉬트 형식으로 보내고자 한다면 다음과 같다. replace는 이전에 동일한 이름의 파일이 있을 때, 덮어씌우는 역할을 한다.
outsheet using "c:\docs\dataexpt.txt", nolabel replace
(2014. 11. 23 추가)
Stata12 이후의 텍스트 파일 내보내기 명령어는 export delimited이다. delimeter 옵션 형식은 import와 같으나 collapse, asstring은 사용하지 않는다.
export delimited using "c:/Users/lebesgue/Desktop/data.txt", delimiter(tab) replace
더 자세한 것은 help use 를 쳐서 매뉴얼을 보면 된다.
첫댓글 방식들이 logical하네요. 그런데 의대에서 Stata로 mixed models, GEE를 하나요?
제가 있는 곳의 교수님이 Stata로 그런 걸 했습니다. 관련 책에 있는 사례를 보고 비슷한 케이스가 있으면 적용하는 식인 것 같아요. 그런데 통계적 이론을 잘 이해하고 하시는지는 잘 모르겠어요. 아직까지 우리나라에서 특히 의대에서 Stata를 자주 쓰는 것 같지는 않습니다. 대부분 아직까지 spss가 주류에요.
난데없이 Stata를 써야해서 난감했는데, 이글 보고 데이터를 읽었습니다. Thank you~
이것도 이제 좀 지나서 업데이트를 해야 하는데 의욕이 안생겨요 ㅠㅠ