日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Stata数据处理: 面板数据填充和补漏

發(fā)布時間:2023/12/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Stata数据处理: 面板数据填充和补漏 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

Stata連享會 ? 主頁 || 視頻 || 推文 || 知乎

溫馨提示: 定期 清理瀏覽器緩存,可以獲得最佳瀏覽體驗。

New! lianxh 命令發(fā)布了:
隨時搜索連享會推文、Stata 資源,安裝命令如下:
? . ssc install lianxh
使用詳情參見幫助文件 (有驚喜):
? . help lianxh

?

?

Source: http://www.statalist.org/forums/forum/general-stata-discussion/general/17996-substitute-rows-with-average-of-row-above-and-below

?

文章目錄

    • @[toc]
    • 問題描述
    • 解決方法1: 使用 tssmooth ma 命令
    • 解決方法2: 使用 duplicates tag 命令
    • 附:文中使用的代碼
      • 🍎 完整閱讀:
      • Stata數(shù)據(jù)處理:面板數(shù)據(jù)的填充和補(bǔ)漏

問題描述

我有一份面板數(shù)據(jù),有些年份上的數(shù)據(jù)有兩行或多行記錄 (例如,本例中 2007 年的數(shù)據(jù))。棘手的是,這兩行數(shù)據(jù)存在差異,且無法判斷哪一個記錄是正確的。此時,比較穩(wěn)妥的選擇是:將這兩漢數(shù)據(jù)都舍棄,使用相鄰年度 (2006 和 2008 年) 的均值作為 2007 年的觀察值 (插值)。

clear input ID year var1 var2 var3 1 2006 34 45 65 1 2007 45 43 41 1 2007 3 56 59 1 2008 39 54 76 1 2009 41 57 68 end save "data00.dta", replace

原始數(shù)據(jù)詳情:

. list+--------------------------------+| ID year var1 var2 var3 ||--------------------------------|1. | 1 2006 34 45 65 |2. | 1 2007 45 43 41 |3. | 1 2007 3 56 59 |4. | 1 2008 39 54 76 |5. | 1 2009 41 57 68 |+--------------------------------+

?


解決方法1: 使用 tssmooth ma 命令

思路:

  • 先刪除重復(fù)的觀察值 (2007 年的數(shù)據(jù))
  • 繼而使用 tsfill 填充年份,讓數(shù)據(jù)變成平行面板;
  • 最后用 tssmooth ma 命令插值 (用前后兩年的平均值代替 2007 年的缺失值)。
    說明:此處 mamoving average 的簡寫。

命令如下:

. use "data00.dta", clear *-刪除重復(fù)值 (數(shù)據(jù)有誤) . drop if year == 2007 . tsset ID year . tsfill . list+--------------------------------+| ID year var1 var2 var3 ||--------------------------------|1. | 1 2006 34 45 65 |2. | 1 2007 . . . |3. | 1 2008 39 54 76 |4. | 1 2009 41 57 68 |+--------------------------------+ *-填充缺失值: forv i = 1/3 {tssmooth ma v`i' = var`i' , w(1, 0, 1)replace var`i' = v`i' if var`i' == . } drop v? list

運行結(jié)果如下:

. forv i = 1/3 {2. tssmooth ma v`i' = var`i' , w(1, 0, 1)3. replace var`i' = v`i' if var`i' == .4. } The smoother applied was(1/2)*[x(t-1) + 0*x(t) + x(t+1)]; x(t)= var1 (1 real change made) The smoother applied was(1/2)*[x(t-1) + 0*x(t) + x(t+1)]; x(t)= var2 (1 real change made) The smoother applied was(1/2)*[x(t-1) + 0*x(t) + x(t+1)]; x(t)= var3 (1 real change made). drop v?. list+--------------------------------+| ID year var1 var2 var3 ||--------------------------------|1. | 1 2006 34 45 65 |2. | 1 2007 36.5 49.5 70.5 |3. | 1 2008 39 54 76 |4. | 1 2009 41 57 68 |+--------------------------------+

從結(jié)果的提示信息可以看出 w(1, 0, 1) 選項的含義:

The smoother applied was(1/2)*[x(t-1) + 0*x(t) + x(t+1)]; x(t)= var1

?


解決方法2: 使用 duplicates tag 命令

思路:

  • 使用 duplicates tag 命令標(biāo)記重復(fù)的觀察值,并使用 gen() 選項產(chǎn)生新變量用以記錄標(biāo)記情況;
  • 刪除重復(fù)的觀察值 (其實,這兩步可以合為一步);
  • 使用 _n 標(biāo)記觀察先后順序 (x[_n] 表示 xt;x_{t};xt?x[_n-1] 表示 xt?1x_{t-1}xt?1?x[_n+1] 表示 xt+1x_{t+1}xt+1?),進(jìn)行插值;
clear input id year var1 var2 var3 1 2006 34 45 65 1 2007 45 43 41 1 2007 3 56 59 1 2008 39 54 76 1 2009 41 57 68 end

使用 duplicates tag 標(biāo)記重復(fù)的觀察值:

. duplicates tag id year, gen(mistake) . list . bysort id year: keep if (_n == 1)foreach v of varlist var1 var2 var3 { replace `v' = (`v'[_n-1] + `v'[_n+1])/2 if mistake}

結(jié)果如下:

. duplicates tag id year, gen(mistake) Duplicates in terms of id year. list // A-1+------------------------------------------+| id year var1 var2 var3 mistake ||------------------------------------------|1. | 1 2006 34 45 65 0 |2. | 1 2007 45 43 41 1 |3. | 1 2007 3 56 59 1 |4. | 1 2008 39 54 76 0 |5. | 1 2009 41 57 68 0 |+------------------------------------------+. bysort id year: keep if (_n == 1) (1 observation deleted). list // A-2+------------------------------------------+| id year var1 var2 var3 mistake ||------------------------------------------|1. | 1 2006 34 45 65 0 |2. | 1 2007 45 43 41 1 |3. | 1 2008 39 54 76 0 |4. | 1 2009 41 57 68 0 |+------------------------------------------+. foreach v of varlist var1 var2 var3 { 2. replace `v' = (`v'[_n-1] + `v'[_n+1])/2 if mistake3. }. list // A-3+------------------------------------------+| id year var1 var2 var3 mistake ||------------------------------------------|1. | 1 2006 34 45 65 0 |2. | 1 2007 36.5 49.5 70.5 1 |3. | 1 2008 39 54 76 0 |4. | 1 2009 41 57 68 0 |+------------------------------------------+

?


附:文中使用的代碼

*------------ *-Solution 1: * You could use tssmooth ma. * For example:clear input ID year var1 var2 var3 1 2006 34 45 65 1 2007 45 43 41 1 2007 3 56 59 1 2008 39 54 76 1 2009 41 57 68 endlistdrop if year == 2007 tsset ID year tsfill list forv i = 1/3 {tssmooth ma v`i' = var`i' , w(1, 0, 1)replace var`i' = v`i' if var`i' == . } drop v? list*------------ *-Solution 2: clear input id year var1 var2 var3 1 2006 34 45 65 1 2007 45 43 41 1 2007 3 56 59 1 2008 39 54 76 1 2009 41 57 68 endduplicates tag id year, gen(mistake) list bysort id year: keep if (_n == 1) list foreach v of varlist var1 var2 var3 { replace `v' = (`v'[_n-1] + `v'[_n+1])/2 if mistake } list

?


🍎 完整閱讀:

Stata數(shù)據(jù)處理:面板數(shù)據(jù)的填充和補(bǔ)漏


?

總結(jié)

以上是生活随笔為你收集整理的Stata数据处理: 面板数据填充和补漏的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。