Stata连享会 (知乎 | 简书 | 码云)

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

  • Stata连享会 精彩推文1 || 精彩推文2

文章目录

  • @[toc]
  • 问题描述
  • 解决方法1: 使用 tssmooth ma 命令
  • 解决方法2: 使用 duplicates tag 命令
  • 附:文中使用的代码
    • 关于我们
    • 联系我们
    • 往期精彩推文

问题描述

我有一份面板数据,有些年份上的数据有两行或多行记录 (例如,本例中 2007 年的数据)。棘手的是,这两行数据存在差异,且无法判断哪一个记录是正确的。此时,比较稳妥的选择是:将这两汉数据都舍弃,使用相邻年度 (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

原始数据详情:

. 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 命令

思路:

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

命令如下:

. use "data00.dta", clear
*-删除重复值  (数据有误)
. 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

运行结果如下:

. 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 |+--------------------------------+

从结果的提示信息可以看出 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] 表示 xt;x_{t};xt​;x[_n-1] 表示 xt−1x_{t-1}xt−1​;x[_n+1] 表示 xt+1x_{t+1}xt+1​),进行插值;
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 标记重复的观察值:

. 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}

结果如下:

.  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 连享会(公众号:StataChina)】由中山大学连玉君老师团队创办,旨在定期与大家分享 Stata 应用的各种经验和技巧。
  • 公众号推文同步发布于 CSDN-Stata连享会 、简书-Stata连享会 和 知乎-连玉君Stata专栏。可以在上述网站中搜索关键词StataStata连享会后关注我们。
  • 点击推文底部【阅读原文】可以查看推文中的链接并下载相关资料。
  • Stata连享会 精彩推文1 || 精彩推文2

联系我们

  • 欢迎赐稿: 欢迎将您的文章或笔记投稿至Stata连享会(公众号: StataChina),我们会保留您的署名;录用稿件达五篇以上,即可免费获得 Stata 现场培训 (初级或高级选其一) 资格。
  • 意见和资料: 欢迎您的宝贵意见,您也可以来信索取推文中提及的程序和数据。
  • 招募英才: 欢迎加入我们的团队,一起学习 Stata。合作编辑或撰写稿件五篇以上,即可免费获得 Stata 现场培训 (初级或高级选其一) 资格。
  • 联系邮件: StataChina@163.com

往期精彩推文

  • Stata连享会推文列表
  • Stata连享会 精彩推文1 || 精彩推文2

Stata:系数为何不显著?GIF 演示 OLS 的性质相关推荐

  1. 【统计学】基本Stata使用手册(2):OLS回归

    本篇为自己总结的基本Stata使用手册~今天更新的是第一部分:OLS回归. 目录 2. OLS 回归 2.1一元线性回归 2.2 多元线性回归 2.3 大样本 OLS 2.4 二值选择模型 2. OL ...

  2. 【Python机器学习】聚类算法任务,评价指标SC、DBI、ZQ等系数详解和实战演示(附源码 图文解释)

    需要源码和数据集请点赞关注收藏后评论区留言私信~~~ 一.聚类任务 设样本集S={x_1,x_2,-,x_m}包含m个未标记样本,样本x_i=(x_i^(1),x_i^(2),-,x_i^(n))是一 ...

  3. Stata连享会推文列表

      Stata 连享会   主页 || 视频 || 推文 温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验.   ✌ 课程详情: https://gitee.com/arlionn/Course ...

  4. 两组回归系数差异检验_【stata系列】——组间系数差异检验

    01  组间系数差异检验是什么? 组间系数差异检验可以用于横截面中产权性质分析.高低分组分析等,在DID模型里也可用于检验post=0(或post=1)时组间系数差异,需要说明的是,DID模型里如果只 ...

  5. 面板数据分析及stata应用笔记

    动态面板数据模型及估计方法 假说里面不要出现显著 文章目录 (一)面板数据基础知识 **一.面板数据的定义** **二.面板数据的分类** **三.面板数据的优缺点** **四.面板数据模型** ** ...

  6. 机器学习之线性回归:OLS 无偏估计及相关性python分析

    戳上面的蓝字关注我们! 作者:alg-flody 编辑:Emily 0 回顾 在最近的推送中,先后总结了最小二乘法的原理,两个求解方法:直接法和梯度下降,最后利用这两种思路进行了python实战.在用 ...

  7. 实证会计理论与因果推断13 线性模型概述

    实证会计理论与因果推断13 线性模型概述1 OLS GLS 大部分应用微观计量模型都在试图去计算causal effects,对这个causal effects有一个比较经典的定义:Causal ef ...

  8. neo4j python 算法_图论与图学习(二):图算法

    选自towardsdatascience 作者:Maël Fabien机器之心编译参与:熊猫 图(graph)近来正逐渐变成机器学习的一大核心领域,比如你可以通过预测潜在的连接来理解社交网络的结构.检 ...

  9. c++ map 自定义排序_Java学习笔记:Map集合介绍

    在介绍它之前先来看看再API文档中是如何介绍它的,看图片: 由图片可以看出,Map属于双列集合,每次可以添加一对数据,并且这两个数据具有映射关系. 单列集合和双列集合区别 一.Map继承体系 1.Ha ...

最新文章

  1. Docker暴露端口服务器公网IP无法访问问题排查
  2. 设置Tomcat字符集为utf-8
  3. linux apache找不到woff2,使服务器Nginx(或者Apache)支持woff2等字体文件
  4. mac自己定义tree命令
  5. pythoncsv文件的操作_python操作CSV文件
  6. 前端开发学习Day4
  7. Java 算法 特殊的数字四十
  8. arcpy.mapping常用四大件-StyleItem
  9. cmd 修改ie快捷方式_windows使用技巧之Win + R 与 CMD 的不同
  10. java 爬虫 sessionid_java爬虫实战之模拟登陆
  11. Mac电脑没声音了怎么办?
  12. 如何找对另一半--第一章 品格与择偶关系
  13. 第三方登陆(一)微信登陆
  14. 各大AI开放平台汇总分析
  15. 知到网课中国戏曲剧种鉴赏考试试题|真题演练|题库(含答案)
  16. ios 仿京东商品属性选择界面
  17. 创业起步?先收藏这份终极指南
  18. php artisan command,artisan command 小技巧
  19. Camera知识问答
  20. 5G和WiFi6的故事

热门文章

  1. Java基础读书笔记
  2. 图像超分辨率重建之SRCNN
  3. 聊聊飞书和钉钉哪个更能打
  4. cuda官网打不开,下载速度慢
  5. gcd(int a, int b) //求最大公约数
  6. 模拟实现msn登陆过程(MSNP15)
  7. 传奇引擎在服务器上无响应,如何解决传奇3服务器在运营过程中出现假死情况...
  8. 安全测试——验证日志文件
  9. rowspan table布局_css如何实现table表格的单元格合并?colspan和rowspan合并单元格(实例)...
  10. repost 力出一孔,“感觉睡觉都是在浪费时间”--孙正义