使用以下数据集。
id date date1a date1b date2a date2b variable
1 1/1/2000 2/6/2009 8/9/2009 7/14/2010 9/2/2010 7
1 1/2/2000 2/6/2009 8/9/2009 7/14/2010 9/2/2010 2
1 1/2/2000 2/6/2009 8/9/2009 7/14/2010 9/2/2010 11
...
1 1/1/2013 2/6/2009 8/9/2009 7/14/2010 9/2/2010 9
1 1/8/2013 2/6/2009 8/9/2009 7/14/2010 9/2/2010 8
2 2/2/2010 6/1/2010 7/9/2011 4/6/2012 5/1/2012 4
2 2/2/2010 6/1/2010 7/9/2011 4/6/2012 5/1/2012 3
2 2/2/2010 6/1/2010 7/9/2011 4/6/2012 5/1/2012 1
...
2 5/1/2012 6/1/2010 7/9/2011 4/6/2012 5/1/2012 1
2 5/1/2012 6/1/2010 7/9/2011 4/6/2012 5/1/2012 1
我想创建变量sum1
和average1
以及sum2
和average2
,这些变量在variable
之间的日期范围内完成date1a
的操作{1}}至date1b
(适用于sum1
和average1
)和date2a
至date2b
(适用于sum2
和average2
) 。
现在,我的方法很费力,容易出错,而且没有捕获我在同一天有重复条目的事实。另外,如果没有匹配date
或date1b
的{{1}},那么我需要手动进行修改。
date2b
答案 0 :(得分:1)
当我看到
时,我停止阅读你的代码local j = date1range
将被解释为
local j = date1range[1]
因此无法成为一般解决方案的基础。
您可以初始化
gen sum1 = .
gen average1 = .
并根据相同的id
,date1a
和date1b
egen group = group(id date1a date1b)
su group, meanonly
然后循环显示group
quietly forval j = 1/`r(max)' {
* start and end dates and id should be identical in each group; this is just look-up
su date1a if group == `j', meanonly
local d1 = r(min)
su date1b if group == `j', meanonly
local d2 = r(min)
su id if group == `j', meanonly
local this = r(min)
su variable if id == `this' & inrange(date, `d1', `d2'), meanonly
replace sum1 = r(sum) if group == `j'
replace mean1 = r(mean) if group == `j'
}
另一笔款和均值应该适合同样的待遇。
中讨论了结构松散相似的一些问题