【问题标题】:Stata - Count observations within windowStata - 计算窗口内的观察值
【发布时间】:2014-03-28 10:22:52
【问题描述】:

我希望创建一个变量 (COUNT_WITHIN_2_DAYS),它是一个日期范围内的观察计数。范围将是规定的日期 +/- 2 天。

 ID#          DATE          COUNT_WITHIN_2_DAYS
  1         1/1/2000                3
  2         1/2/2000                4
  5         1/2/2000                4
  6         1/4/2000                3
  9        1/12/2000                1
 11         3/1/2001                2
 12         3/3/2000                4
 16         3/4/2000                3
 18         3/5/2000                3
 21         3/8/2000                1

我用if 命令尝试了egen,但没有成功

【问题讨论】:

  • 不要混淆或混淆if 命令和if 限定符。

标签: stata


【解决方案1】:

此解决方案涉及循环所有观察结果,并使用这样一个事实,即在为日期变量提供日期格式之后,您可以像使用整数一样计算日期。 (这些日期只是整数。有关详细信息,请参阅例如help datetime)。

每个观察值都与循环固定的一个观察值进行比较。 ind == 1 用于绝对差异为<= 2 的那些观察。之后我用summarize加起来 此类观察的数量。最后,使用变量counter 将求和的结果分配给固定观测值。重复该过程,直到每个观察结果都已确定为止。

clear all
set more off

*-------------- example data ----------------
input ///
id str15 date 
  1         "1/1/2000"                
  2         "1/2/2000"                
  5         "1/2/2000"                
  6         "1/4/2000"                
  9        "1/12/2000"                
 11         "3/1/2001"                
 12         "3/3/2000"                
 16         "3/4/2000"                
 18         "3/5/2000"                
 21         "3/8/2000"               
 end

gen date2 = date(date, "MDY")
format date2 %td

drop date
rename date2 date

sort date
list

*------------ what you want ------------------

gen counter = .
gen ind = .
forvalues i = 1/`=_N' {
    replace ind = abs(date - date[`i']) <= 2

    summarize ind, meanonly
    replace counter = r(sum) in `i'
}

drop ind
list

【讨论】:

  • 请参阅stata-journal.com/sjpdf.html?articlenum=pr0033SJ 关于“间隔事件”的提示
  • 只是补充一点,如果数据在时间上是有规律的,这将是以前、现在和后续观察中的值的微不足道的添加。不规则的时间间隔使问题变得棘手。
猜你喜欢
  • 1970-01-01
  • 2015-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多