在 STATA 上分析 Panel Data

CW Wayne Yeh
4 min readSep 4, 2021

--

分析 Panal Data 的準備與注意事項

這節整理一些處理 Panel Data 時應該注意的地方。相較於 cross-section data,Panel Data 多了時間維度,也就是說可以將資料表示成(Y_{i,t}, X_{i,t})的形式。Panel Data 中最理想的狀況是:對每個人 i 而言,時間 t 的起訖、頻率都一致且齊全(strict balance)。但實際的資料通常不會那麼整齊,也許有些人在某段時間內沒有觀察值(失業),也有可能每個人開始被觀察到的時間不同(different entering cohort),除了在分析時需要多加留意外,在處理資料時更需要小心以避免出錯。以下記錄了一些注意事項與實用的指令:

  • 首先,STATA 是透過 xtset <panel_var> <time_var> 將資料設為 Panel Data。我們預期 <panel_var> <time_var> 應該作為這份資料的 identifier,因此若有人同個時點被觀察到數次,xtset 就會出現 error。另外,<panel_var> <time_var> 需要是數值變數,若是字串的話,要先透過 destringencode 轉換。
  • 資料中的時間不一定是以 1 單位為間隔,也有可能像奧運年份一樣,每 4 年間隔。xtset 預設時間間隔為 1 單位的數值,若要修改則要額外加上 option ,delta(<gap>) ,其中 <gap> 是時間間隔(以奧運為例的話就是 delta(<gap>) )。
  • 設定完 Panel Data 之後,可以對變數使用額外的 operators。像是:f.<var> 可以取得下一期的值(forward)、 l.<var> 可以取得前一期的值 (lag)、d.<var> 可以取得這期的值扣掉前期的值(difference)。
  • 請小心 l.<var><var>[_n-1] 的差異,前者是上一期的資料(視你在定義 panel 時,時間的 gap 為何),後者則是上一筆資料。我們假設資料依 <panel_var> <time_var> 排序,即使如此,但上一筆資料仍不一定等於上一期資料,因為不一定所有人都有每一期的資料。
  • 當某人某期 missing 時,請小心使用 l.<var>。一旦指令中涉及到的 l.<var> missing, 那麼最後生出來的變數也會 missing。在某些情境下,這可能不會是你所希望的,例如:生成一年內的累計薪資(希望 missing 實際上以 0 處理)。

Panel Data 有許多專門的指令,其中一個有趣的指令是 tsfill (你可以從 prefix 猜到, 這個指令也適用於 time serie data)。 tsfill 可以填補上某人中斷而遺失的樣本點,比如說:A 國家每年都參加奧運,除了 2008 年因故缺席,這時 tsfill 就會補上(A、2008)的樣本點(其未知變數值為 missing)。這麼做不僅有利於資料呈現,還能夠幫助特定的運算。類似的功能可以參考 option full 以及指令 fillna

  • 其他 panel 系列的指令留待讀者自行探索:xtdescribexttransxttabxtreg

小結

Panel Data 的指令也許沒有比較複雜,但絕對需要花更多心思避免出錯。根本的原因就是資料變複雜了:有些人 N 年後就不在職場上(entry and exit)、有些人某個月兼了數份工作、有些人會暫時離開樣本而後再回來,考量到這些,樣本的選取、變數的定義就不得不謹慎。

最後稍微提一下交易資料,交易資料和 Panel Data 一樣有人 id 與時間維度,可以視為 Panel Data 的一種。但交易資料隨著人的不同,觀察到的時間會有很大的落差:有些人可能定期消費,有些人則是只買一次就流失了。在交易資料中,依分析目的不同,需要清楚的區分:第幾筆資料、第幾期的資料、何時加入的人(cohort)等等。

--

--

CW Wayne Yeh

資料分析/閱讀筆記/生活雜感。我是葉政維,台大經研畢,目前是樹鋸分析師🪚,正在職場站穩腳步,也在探索什麼是好的生活。