600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > stata F值缺失_Stata数据处理: 面板数据填充和补漏

stata F值缺失_Stata数据处理: 面板数据填充和补漏

时间:2022-05-07 12:26:13

相关推荐

stata F值缺失_Stata数据处理: 面板数据填充和补漏

Stata连享会 (知乎 | 简书 | 码云)连享会 最新专题 直播

Source: /forums/forum/general-stata-discussion/general/17996-substitute-rows-with-average-of-row-above-and-below

连享会-知乎推文列表

Note: 助教招聘信息请进入「课程主页」查看。

因果推断-内生性 专题⌚ .11.12-15 主讲:王存同 (中央财经大学);司继春(上海对外经贸大学)课程主页:/arlionn/YG|微信版

/BlTL43 (二维码自动识别)

空间计量 专题⌚ .12.10-13 主讲:杨海生 (中山大学);范巧 (兰州大学)课程主页:/arlionn/SP|微信版

/arlionn/DSGE (二维码自动识别)

问题描述

我有一份面板数据,有些年份上的数据有两行或多行记录 (例如,本例中 年的数据)。棘手的是,这两行数据存在差异,且无法判断哪一个记录是正确的。此时,比较稳妥的选择是:将这两汉数据都舍弃,使用相邻年度 ( 和 年) 的均值作为 年的观察值 (插值)。

clearinput ID year var1 var2 var31 34 45 651 45 43 411 3 56 591 39 54 761 41 57 68endsave "data00.dta", replace

原始数据详情:

. list+--------------------------------+| ID year var1 var2 var3 ||--------------------------------|1. | 1 344565 |2. | 1 454341 |3. | 1 35659 |4. | 1 395476 |5. | 1 415768 |+--------------------------------+

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

思路:

先删除重复的观察值 ( 年的数据)继而使用tsfill填充年份,让数据变成平行面板;最后用tssmooth ma命令插值 (用前后两年的平均值代替 年的缺失值)。

说明:此处ma是moving average的简写。

命令如下:

. use "data00.dta", clear*-删除重复值 (数据有误). drop if year == . tsset ID year. tsfill. list+--------------------------------+| ID year var1 var2 var3 ||--------------------------------|1. | 1 344565 |2. | 1 ... |3. | 1 395476 |4. | 1 415768 |+--------------------------------+*-填充缺失值: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

运行结果如下:

. 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 344565 |2. | 1 36.5 49.5 70.5 |3. | 1 395476 |4. | 1 415768 |+--------------------------------+

从结果的提示信息可以看出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命令标记重复的观察值,并使用gen()选项产生新变量用以记录标记情况;删除重复的观察值 (其实,这两步可以合为一步);使用_n标记观察先后顺序(x[_n]表示 ;x[_n-1]表示 ;x[_n+1]表示 ) ,进行插值;

clearinput id year var1 var2 var31 34 45 651 45 43 411 3 56 591 39 54 761 41 57 68end

使用duplicates tag标记重复的观察值:

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

结果如下:

. duplicates tag id year, gen(mistake) Duplicates in terms of id year. list // A-1+------------------------------------------+| id year var1 var2 var3 mistake ||------------------------------------------|1. | 1 344565 0 |2. | 1 454341 1 |3. | 1 35659 1 |4. | 1 395476 0 |5. | 1 415768 0 |+------------------------------------------+. bysort id year: keep if (_n == 1)(1 observation deleted). list // A-2+------------------------------------------+| id year var1 var2 var3 mistake ||------------------------------------------|1. | 1 344565 0 |2. | 1 454341 1 |3. | 1 395476 0 |4. | 1 415768 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 344565 0 |2. | 1 36.5 49.5 70.5 1 |3. | 1 395476 0 |4. | 1 415768 0 |+------------------------------------------+

附:文中使用的代码

*------------*-Solution 1:* You could use tssmooth ma.* For example:clearinput ID year var1 var2 var31 34 45 651 45 43 411 3 56 591 39 54 761 41 57 68endlistdrop if year == tsset ID yeartsfilllist 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: clearinput id year var1 var2 var31 34 45 651 45 43 411 3 56 591 39 54 761 41 57 68endduplicates tag id year, gen(mistake) listbysort id year: keep if (_n == 1)listforeach v of varlist var1 var2 var3 { replace `v' = (`v'[_n-1] + `v'[_n+1])/2 if mistake}list

相关课程

连享会-直播课上线了!免费公开课:
直击面板数据模型- 连玉君,时长:1 小时 40 分钟Stata 33 讲- 连玉君, 每讲 15 分钟.部分直播课课程资料下载(PPT,dofiles 等)
课程一览

支持回看,所有课程可以随时购买观看。连享会 - 文本分析与爬虫 - 专题视频

主讲嘉宾:司继春 || 游万海

连享会 - 效率分析专题已上线:可随时购买学习+全套课件,课程主页已经放置板书和 FAQs

主讲嘉宾:连玉君 | 鲁晓东 | 张宁课程主页,微信版/arlionn/TE

Note: 部分课程的资料,PPT 等可以前往连享会-直播课主页查看,下载。
关于我们
Stata 连享会由中山大学连玉君老师团队创办,定期分享实证分析经验。直播间有很多视频课程,可以随时观看。连享会-主页和知乎专栏,300+ 推文,实证分析不再抓狂。公众号推文分类:计量专题|分类推文|资源工具。推文分成内生性|空间计量|时序面板|结果输出|交乘调节五类,主流方法介绍一目了然:DID, RDD, IV, GMM, FE, Probit 等。
连享会小程序:扫一扫,看推文,看视频……
扫码加入连享会微信群,提问交流更方便

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。