STATA 的讀入寫出與準備
…
序言
第二章會開始會介紹 STATA 的語法與常用功能。在這系列的教學筆記中,STATA 指令大多會以一般化的形式呈現,也就是說各位需要自行把 argument 替換成自己需要的值,或是適當地增減 option 與條件(回想下 1–2 的 STATA 指令結構)。之前有提到 do 檔是用來紀錄 STATA 的指令,我很推薦各位把消化過的指令記錄在 do 檔之中並好好保存,這除了是各位的心血之外,也會是之後參考(抄)code 的依據。
在開始各小節開始前,先有個概念:STATA 讀取資料的變數(欄位)大致上可以區分成數值(numeric)與字串(string)兩大類型,不同變數類型有不同的操作方式。其中, 字串在 data browser 中以紅色表示,在 do-file 中則是棕色(see Fig 2–1)。如同許多程式慣例,STATA 用 double quotation 來標注字串,如:”STATA”
、”one2three”
。最後,數值變數的遺失值 在 Stata 中以 dot .
表示,並且在數值比較與條件上代表無限大(see 2–2)。以下各節會利用 STATA 內最常見的範例資料(auto.dta)或是自行輸入的人造資料說明,但也推薦各位可以使用比較複雜的資料實際演練。
讀取資料前的準備
建立研究專題用的資料夾
這也許是滿直覺的一件事,但各位還記得 STATA 有一次只能讀入一份資料的限制嗎?這意味著我們常會需要暫存檔案,因此檔案的命名以及存放路徑的管理就需值得多花點巧思。一種方便管理的做法是建立樹狀的路徑結構(see Fig 2-1),分門別類地來存放原始資料(如:csv 檔、dta 檔)、中間檔案 、程式碼(如:do 檔、py 檔)以及結果(如:doc、xls、tex 檔)。這麼做能讓檢索更明確且有邏輯。當然,這點同樣適用於其他的統計軟體與程式上。
設定路徑與 log 檔
Fig 2–1 是一個 do-file 常見的樣貌,包括讀取資料以及設定路徑等事前準備,以下先條列說明有關事前準備的指令(通常會寫在 do-file 最前面):
clear all
,將現有資料與儲存的變數全部清除。capture log close
,關閉現有的 log 檔,其中的 Prefixcapture
可以強制忽略 error message,在此是用來避免因為 log 檔不存在所產生的 error。set more off
,讓 Result Window 可以持續印出結果。注意,這只對同一次的執行(run/do)有效,如果希望可以在後續的執行都維持此設定,可以補上 option,perm
。另外set
還可以進行更多設定,像是指派 STATA 多少記憶體、設定矩陣大小等。cd <path>
,可以用來設定工作路徑,其中的 cd 代表 current directory,各位可以藉由pwd
(present working directory)來查看目前的工作路徑。設定好工作路徑後,檔案就可以依照工作路徑的相對路徑讀取。例如:Fig 2-1 將工作路徑設在“User/<user>/Desktop/stata_proj”
,如果我們想讀取”auto.dta”
(參考 Fig 2-1 的路徑樹),讀取路徑就會是”input/auto.dta”
而不必從最頂層的目錄User
一路讀到auto.dta
。log using <path>, replace
,可以開啟 log 檔並指定儲存位置。option ,replace
可以覆寫現有的檔案若改為append
則可以接續已存在的 log。log close
,可以關閉並停止紀錄 log 檔。
讀取資料
如果要讀取的資料是 STATA 的 dta 檔,可以點選 STATA 左上角的「file -> open」,或是執行 use <path>, clear
,其中 option , clear
可以在讀取的同時清除當前的檔案(STATA 一次只能讀一份資料!)。STATA 也支援許多不同的資料檔案類型(csv、txt 等),如果要讀取 dta 檔以外的資料類型,可以點選右上角的「file -> import」,從中挑選適合的檔案類型並按指示完成讀取。這邊請各位留意,透過 GUI 讀入檔案後,STATA 會在 Result Window 上產生程式碼,各位而可以在確認無誤後,再貼回到 do-file 上。就我個人經驗,有些時後透過 GUI 產生 code 會比較方便,像是這裡的讀檔以及設定繁多的繪圖。
另外,在 Fig 2-1 中,各位可以發現所有的路徑、檔名我都有加上 quotation。不僅是因為他們具有字串的性質,更重要的是:字串在 do-file 中會被標成棕色,這樣可以增加可讀性。尤其,我們瀏覽 do-file 時很常需要去查閱讀取、合併、儲存了哪些檔案。最後,雖然有些時候不加 quotation 不會影響讀取,但當檔名或路徑有空白時,就會吃鱉囉!因此強烈建議各位的路徑、檔名一定要加 quotation。
直接輸入資料
除上述的讀取方式之外,STATA 也可以直接在 do-file 輸入資料(see Fig 2-2)。這種方式實務上較少用到,但在需要自行創造簡單資料的場合(像是教學)尤其方便。另一方面,這邊也希望展示一下數值變數與字串變數在 do-file 與 data browser 中的樣子。
直接輸入資料可以利用input
指令。首先,input
那行需要輸入變數名稱,由於變數預設為數值變數(預設儲存成 float),若要輸入字串的話,需要在變數名稱前加上 str<length>
。其中的 <length> 是指字串的最大長度 (以 byte 為單位)。請注意,中文字串的長度不等於文字數,這和中文編碼 (encoding)的方式有關。比如說:中文在 utf-8 的編碼方式下長度為 3,因此 ”王小明”
的長度為 9。接著就可以在各行中插入資料。請注意,字串變數的值,需要透過 quotation 標注。最後加上 end
就可以直接透過 do-file 輸入資料。
儲存資料
若要將資料存成 dta 檔,可以非常直觀地點擊主界面 Tool Bar 左側的「Save」,又或是輸入 save <path>, replace
。這裡的 , replace
可以把現有的存檔複寫掉。若要存成其他檔案類型,可以點選「file -> export」。和讀取一樣,記得把在 Result Window 上產生程式碼貼到 do-file 上。
TAKEAWAYS
- 利用 GUI 輔助讀取資料,再將指令紀錄於 do-file。
- 讀資料時加上
, clear
,存資料時加上, replace
。