【发布时间】: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()在generate和egen计算不同的东西。在前者中,它计算一个变量的运行总和,而在后者中,它计算组合总和。