我正在尝试计算一个时间窗口内的观察次数,特别是到达时间1
小时之前和到达时间1
小时之后。
我尝试了以下代码进行20
观察:
local N=_N
quietly forval i = 1/`N' {
count if (arrivaltime >= arrivaltime[`i']-(1000*60*60) & ///
arrivaltime<=arrivaltime[`i']+(1000*60*60))
replace countcall = r(N) in `i'
}
代码可以正常运行,但是我的数据集由250,000
个obs组成,并且此循环耗时超过1.5
小时。
我的数据如下:
clear
input double(makeid arrivaltime)
1 1.7398209e+12
2 1735689960000
3 1735690260000
4 1735690560000
5 1.7356908e+12
6 1735692060000
7 1735692540000
8 1735693620000
9 1735695060000
10 1735695780000
11 1735696020000
12 1735697640000
13 1735697640000
14 1735698540000
15 1735700160000
16 1735700460000
17 1735700460000
18 1735701240000
19 1735701540000
20 1735701720000
21 1735702980000
22 1735703160000
23 1735704060000
24 1735704420000
25 1735705440000
26 1735705860000
27 1735706040000
28 1735706160000
29 1735706580000
30 1.7357067e+12
31 1735706940000
32 1735708140000
33 1.7357097e+12
34 1.73571e+12
35 1.7357106e+12
36 1.7357067e+12
37 1735711440000
38 1.7357118e+12
39 1735715280000
40 1.7357154e+12
41 1735716720000
42 1735717380000
43 1735717620000
44 1735717980000
45 1735718940000
46 1735720380000
47 1735722480000
48 1735723140000
49 1.7357238e+12
50 1735724040000
51 1735725060000
52 1.7357256e+12
53 1735725780000
54 1735726080000
55 1.7357268e+12
56 1.7357271e+12
57 1735727820000
58 1735728240000
59 1735728480000
60 1735729502000
61 1735729655000
62 1735729920000
63 1735729944000
64 1735730280000
65 1735730520000
66 1735731060000
67 1735731240000
68 1735731360000
69 1735731420000
70 1735731840000
71 1.7357319e+12
72 1735732680000
73 1.7357328e+12
74 1735732860000
75 1735732860000
76 1735733160000
77 1735733520000
78 1735734060000
79 1735734180000
80 1735734720000
81 1735734852000
82 1735735030000
83 1735735140000
84 1.7357352e+12
85 1.7357352e+12
86 1735735920000
87 1735735980000
88 1735736450000
89 1735736520000
90 1735736760000
91 1735736824000
92 1735737060000
93 1735737232000
94 1735737360000
95 1735737540000
96 1735737681000
97 1735737780000
98 1735738006000
99 1735738260000
100 1735738384000
end
format %tc arrivaltime
我已经尝试过egen
命令:
egen count_patients=count if (arrivaltime >= arrivaltime[_n]-(1000*60*60) & ///
arrivaltime<=arrivaltime[_n]+(1000*60*60))
但是,这将为所有行提供_N
。
将感谢您提出更有效的方法的建议。
答案 0 :(得分:1)
您可以使用社区贡献的命令rangestat
:
rangestat (count) makeid, int(arrival -3.6e6 3.6e6)
您可以按照以下步骤从SSC安装它:
ssc inst rangestat