【问题标题】:Filling in missing values填写缺失值
【发布时间】:2015-11-22 03:50:40
【问题描述】:

Stata 中的编码:

在我跨越 5 年的不平衡每周面板数据集中,我寻求:

  1. 填写跳过的周数。我正在为此使用 tsfill 命令。
  2. 但是,如果连续缺少 5 周以上的周数,我不想填写周数。也就是说,如果缺少 5 周或更短的周数,我们会继续生成那些缺失值为零的周;但如果缺少周数超过 5 周,则忽略它。

第二步对我来说是一个挑战。有什么建议吗?

样本原件:

id week var1 var2 var3
1   1    0    3    0
1   3    1    0    0 
1   5    1    0    0
1   20   0    4    0

需要样品:

id week var1 var2 var3
1   1    0    3    0
1   2    0    0    0   (new row!)
1   3    1    0    0 
1   4    0    0    0   (new row!)
1   5    1    0    0
1   20   0    4    0

【问题讨论】:

  • 你的数据集有多庞大?做一个完整的填充然后删除你不想要的行是否可以管理?
  • 近 300,000 个 obs。我认为这是不可行的。
  • 一种方法可能是:(1) 使用 tsfill 填写所有内容,然后 (2) gen DROPME = 1 (3) 按 id、时间遍历并设置 DROPME = 0 如果有非5 距离邻域内的观测缺失。 (4) 使用 dropme = 1 删除每一行。
  • 谢谢你,马修。你能把它写成答案吗?我很难理解这些符号,尤其是第 3 步。
  • 我不是一个真正的 Stata 编码器......我必须到处查找语法。我只是在逻辑上思考,您真正拥有的两个选项是:(1)使用 TSFILL 并删除您不想要的行或(2)基本上编写您自己的 TSFILL 版本

标签: stata missing-data


【解决方案1】:

我想我找到了答案。

iri_key week    units
1   1   2
1   3   3
1   4   5
1   6   7
1   15  2
2   1   5
2   2   7
2   3   3
2   4   6
2   6   4


tsset iri_key week
tsfill, full
replace units=0 if units==.
gen check=0
replace check=1 if units==0
tsspell, cond(check==1)
drop if _seq>5

【讨论】:

  • 据我了解,您不需要第一个 replacecheck 变量,因为 tsspell, cond(units == .) 应该可以直接工作。 tsspell 来自 SSC,必须安装后才能使用。
猜你喜欢
  • 1970-01-01
  • 2021-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-25
相关资源
最近更新 更多