楼主: LucasCage
3452 5

[面板数据求助] 【请教Stata指令】剔除中断年份及其前后两年的观测值 [推广有奖]

  • 0关注
  • 0粉丝

大专生

91%

还不是VIP/贵宾

-

威望
0
论坛币
208 个
通用积分
0.7658
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1105 点
帖子
56
精华
0
在线时间
6 小时
注册时间
2019-3-4
最后登录
2023-9-8

楼主
LucasCage 发表于 2021-11-7 18:27:33 来自手机 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
面板回归,核心变量是利用(t-2, t+2)即5年计算的滚动标准差。非平衡面板,故需要剔除断点及其前后两年的观测值。如下图。

论坛中能查到如何剔除存在断点的非连续样本整体。虽然非连续,但还是有一部分观测值能拯救一下,不想完全删除。不知如何用Stata实现,还请高人指点。 image20211107182733.jpg
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Stata tata 观测值 非平衡面板 请高人指点

沙发
cw666 发表于 2021-11-8 12:22:19
  1. egen id = group(企业)
  2. gen var1 = 1
  3. bys id (年份): gen var2 = sum(var1)
  4. gen var3 = 0
  5. bys id (年份): replace var3 = 年份[1] if var2 == 1
  6. bys id (年份): replace var3 = 年份[_n] -年份[_n-1] if var2 >1
  7. gen var4 = 0
  8. replace var4 = 1 if var3 == 2
  9. gen var5 = 0
  10. replace var5 = 年份 if var4 == 1
  11. bys id : egen var6 = max(var5)
  12. bys id : drop if (年份 - var6) == 1
  13. bys id : drop if (年份 - var6) == 0
  14. bys id : drop if (年份 - var6) == -2
  15. bys id : drop if (年份 - var6) == -3
  16. drop id var1-var6
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Sunknownay + 3 + 3 + 3 热心帮助其他会员

总评分: 学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

藤椅
LucasCage 发表于 2021-11-8 13:51:25 来自手机
cw666 发表于 2021-11-8 12:22
谢谢指点!

板凳
fengbjmu 发表于 2021-11-9 20:52:20
[em23][em23]

报纸
qianchen 发表于 2021-11-9 21:45:19
clear
input str1 企业 double(year x)
"A" 2006   2.025
"A" 2007  1.042
"A" 2008  .297
"A" 2010  1.72
"A" 2011   .729
"A" 2012   .861
"A" 2013  .2393
"A" 2014   .516
"A" 2015 1.81
"A" 2016  1.015
"A" 2018   1.095
"A" 2019  1.33
"A" 2020  .360
"A" 2021   .735
"B" 2009  -.961
"B" 2010   .7521
"B" 2011  -.466
"B" 2012   .752
end

egen id = group(企业)
gen var1 = 1
bys id (year): gen var2 = sum(var1)
gen var3 = 0
bys id (year): replace var3 = year[1] if var2 == 1
bys id (year): replace var3 = year[_n] -year[_n-1] if var2 >1
gen var4 = 0
replace var4 = 1 if var3 == 2
gen var5 = 0
replace var5 = year if var4 == 1
bys id : egen var6 = max(var5)
bys id : drop if (year - var6) == 1
bys id : drop if (year - var6) == 0
bys id : drop if (year - var6) == -2
bys id : drop if (year - var6) == -3
drop id var1-var6
list
+---------------------+
     | 企业   year       x |
     |---------------------|
  1. |    A   2006   2.025 |
  2. |    A   2007   1.042 |
  3. |    A   2008    .297 |
  4. |    A   2010    1.72 |
  5. |    A   2011    .729 |
     |---------------------|
  6. |    A   2012    .861 |
  7. |    A   2013   .2393 |
  8. |    A   2014    .516 |
  9. |    A   2020     .36 |
10. |    A   2021    .735 |
     |---------------------|
11. |    B   2009   -.961 |
12. |    B   2010   .7521 |
13. |    B   2011   -.466 |
14. |    B   2012    .752 |
     +---------------------+
按照楼上代码的结果是这样的

地板
cw666 发表于 2021-11-11 10:26:40
qianchen 发表于 2021-11-9 21:45
clear
input str1 企业 double(year x)
"A" 2006   2.025
之前没有发现一个组会有多个缺失的情况,就用了max,现在改了应该可以了
  1. egen id = group(企业)
  2. gen var1 = 1
  3. bys id (年份): gen var2 = sum(var1)
  4. gen var3 = 0
  5. replace var3 = 1 if var2 == 1
  6. bys id (年份): replace var3 = 年份[_n] -年份[_n-1] if var2 > 1
  7. gen var4 = 0
  8. bys id (年份): replace var4 = var3[_n] -var3[_n-1] if var2 > 1
  9. gen var5 = 0
  10. bys id (年份): replace var5 = var4[_n] -var4[_n-1] if var2 > 1
  11. gen var6 = 0
  12. bys id (年份): replace var6 = var4[_n] -var4[_n+1]
  13. replace var6 = 0 if var6 == .
  14. gen var7 = 0
  15. bys id (年份): replace var7 = var6[_n] -var6[_n+1]
  16. drop if var4 == 1 | var4 == -1 | var7 == 1 | var7 == -1 | var7 == 3 | var7 == -3 | var6 == -1
  17. drop id var1-var7
复制代码

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-1-27 04:59