【问题标题】:Stata panel data: egen =total() over period starting with a given dateStata面板数据:从给定日期开始的时期内的egen =total()
【发布时间】:2018-06-16 19:19:57
【问题描述】:

我的数据结构如下(最后是dataex 输出,但由于它只显示数字时间表达式而令人困惑):

id yearmo birthmo smoke surveytime health
1 2002m1  2003m11  0.8  0  .
1 2002m2  2003m11  0.7  0  .
[...]
1 2004m1  2003m11  0.5  1  "good"

我将包含年度调查信息(例如我的因变量 health)的面板数据集与有关吸烟暴露的月度信息(数字)合并。我的时间变量yearmo 包含年份和月份,格式为 %tm。 Birthmo 是个人的出生月份和年份,格式相同。

我想生成一个变量,包含怀孕期间的总烟雾暴露量,即在birthmo[_n-1], birthmo[_n-10]期间。

是否可以使用egen prebirth_smoke = total(smoke) 并将其引用到这个时间段?到目前为止我找不到任何东西。但是由于可以计算像gen age2000 = (14610-birthday)/365.25这样的时间差,它指的是一个表示生日的变量,我认为我的问题也必须有一个解决方案......

我的另一种方法是填写每个月的调查信息并使用by persnr: egen prebirth_smoke=total(smoke, smoke[_n-10]) if birthmo = moyear 之类的命令。然后我将不得不再次将此信息复制到一年中的每个月,并将数据折叠为年度信息。有没有更简单的方法?

* Example generated by -dataex-. To install: ssc install dataex
clear
input double persnr float(moyear birthmo surveytime) double smoke
23908 504   . 0  23.96554252199413
23908 505   . 0 16.531705948372615
23908 506   . 0 19.731182795698928
23908 507   . 0 15.172916666666667
23908 508   . 0 12.199596774193546
23908 509   . 0 12.218055555555557
23908 510   . 0 10.207416911045943
23908 511   . 0  11.54166666666667
23908 512   . 0 14.311111111111112
23908 513   . 0 16.728005865102638
23908 514   . 0 22.759722222222226
23908 515   . 0  21.10752688172043
23908 516 515 1 27.638440860215056
23908 517 515 1 24.914434523809522
23908 518 515 1 22.103515874027796
23908 519 515 1 16.881249999999998
23908 520 515 1  14.51930596285435
23908 521 515 1 10.573909068193176
23908 522 515 1 10.057123655913978
23908 523 515 1   12.2486559139785
end
format %tm moyear
format %tm birthmo

【问题讨论】:

  • 对不起,我确定我在告诉我的问题之前写了一个问候语!
  • 一些问候语会被自动删除。 Stack Overflow 中不使用问候和感谢,因为我们坚持只使用事实编码问题和答案,避免闲聊。
  • 老实说,我必须运行 dataex 代码才能理解您在第一个表中的意思...
  • 请注意 sum()generateegen 计算不同的东西。在前者中,它计算一个变量的运行总和,而在后者中,它计算组合总和。

标签: date sum panel stata


【解决方案1】:

这适用于您的示例数据:

egen BIRTHMO = mean(birthmo), by(persnr) 
egen exposure = total(inrange(BIRTHMO - moyear, 1, 10) * smoke), by(persnr) 

有关相关技术的调查,请参阅https://www.stata-journal.com/sjpdf.html?articlenum=dm0055

小点:

  1. dataex 代码没有什么令人困惑的地方。关键是一旦你运行它,它的含义就很清楚了。

  2. 您的egen 代码不起作用,即使在精神上也是如此。 total() 参数是非法的。错字:第二个= 应该是==。警告:helphelp 明确表示不使用下标表达式。

  3. egen, sum() 在 Stata 9 中没有记录。最好使用并参考total()。代码是等效的,但仍然成立。

【讨论】:

  • 我不记得我最后一次看到sum() 用在egen 是什么时候。我认为它仍然可用可能是出于向后兼容性的原因。
  • 它仍然存在,但正如所说的未记录。
  • 您的代码运行良好,感谢@Nick Cox。我编辑了主题以保持一致性。我不小心写了 Sum() 而不是 total()。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-14
  • 2017-07-19
  • 2018-08-15
  • 2020-03-24
  • 1970-01-01
  • 2016-01-13
  • 1970-01-01
相关资源
最近更新 更多