【问题标题】:Stata: Creating Date Dummies from Start and End DateStata:从开始日期和结束日期创建日期假人
【发布时间】:2014-07-22 12:48:03
【问题描述】:

我想从一些开始和结束日期创建虚拟变量,如果在范围内,则取值为 1。例如,来自

id    start     end
1     01072014  05072014
1     05012014  06012015

我想得到

id    start     end       d_01012014  d_02012014 d_03012014 ... d_01052014 ... d_31122014
1     01012014  02012014  1           1          0              0              0
1     01052014  02052015  0           0          0              1              0

这样我最终可以重塑我的长期数据,将所有观察结果排除在白天范围之外。 我的想法是使用 stata 日期格式的循环,如下所示:

foreach i in *stataformat startdate*/*stataformat enddate* {
generate d_`i'=1 if `i'>=start & `i'<=end
}

但是这种方法的问题是我的变量会有难以理解的名称。那么您是否建议另一种方法,或者知道如何将包含 stata 日期代码的变量重命名为“可理解的”名称? 非常感谢!

【问题讨论】:

  • 能给个完整的宏吗?我不知道您为 stataformat startdate 输入了什么。一个潜在的解决方法是将您的日期更改为“从参考日期过去的天数/周数”。另一个(我还没有验证)是从每个 i 中提取月、日和年,并将它们连接在一起作为你的变量名。
  • 日期(不是日期和时间)的内部 Stata 格式是 1960 年 1 月 1 日中的天数,所以这已经是 @Penguin_Knight 建议的格式

标签: stata


【解决方案1】:

如果我想从第一个原则开始这样做,我将从长格式数据开始:

clear
input id  spell  str10 start   str10 end
      1   1      "01-07-2014"  "05-07-2014"
      1   2      "06-08-2014"  "06-01-2015"
end

gen start2 = date(start, "MDY")
gen end2 = date(end, "MDY")

format start2 %td
format end2 %td

sum start2
local min = r(min)
sum end2
local range = r(max) - `min' + 1

expand `range'
bys id spell : gen date = `min' + _n - 1
format date %td
keep if date >= start2 & date <= end2

但是,由于这可能是生存分析数据,并且您已经 stset 数据集(或者您将要),您可以使用 stsplit

【讨论】:

  • 非常感谢,很适合我。现在它变得有点棘手。对于每个法术,我都有一年的月收入数字。我想知道开始和结束是就业日期时每天的收入。跨越咒语,就业日期可以重叠。我想得到一个很长的结果,这样每次观察都是一天的工作,表明每天的总收入(来自所有咒语)和每天的最大收入以及咒语,这样我就可以知道哪个是主要的收入来源那天。有什么提示我可以如何使用您的建议吗?顺便说一句,我不知道生存分析是什么意思。
猜你喜欢
  • 1970-01-01
  • 2021-05-16
  • 1970-01-01
  • 2012-08-19
  • 2021-06-20
  • 2022-01-23
  • 2021-04-23
  • 2021-08-22
  • 2020-12-23
相关资源
最近更新 更多