假设我有一个右连续步(或阶梯)函数s
,它在变量t
中包含的时间点跳转:例如s
可以是sts gen
获得的时间到事件数据的Kaplan-Meier估算值。
现在,假设我有另一个变量r
,其中包含的时间点可能与t
中包含的时间点不同,我想创建另一个变量p
这是我的步骤函数在r
的时间点评估。
t | s | r
0.5 | 0.9 | 0.7
1.2 | 0.85 | 0.8
1.5 | 0.8 | 1.25
1.5 | 0.8 | 1.3
我的数据可能看起来像上面显示的那样,在这种情况下我们会有
p
0.9
0.9
0.85
0.85
或换句话说,对于r
的每个值,我们找到小于或等于t
的最大r
值,并将p
等于{{1} }}
我的问题是:我如何以有效的方式做到这一点?显然,对于每个s
- 值,我可以执行以下操作:
r
但这不是我想要的,因为当观察数量很大时,这非常耗时。
答案 0 :(得分:1)
我建议您稍微改变一下您的问题,即您有t
的新值s
未知;您的插值规则将替换为先前已知的s
值。 Stata术语中的过程写在this Stata FAQ中。
. list, sep(0)
+------------+
| t s |
|------------|
1. | .5 .9 |
2. | 1.2 .85 |
3. | 1.5 .8 |
4. | 1.5 .8 |
5. | .7 . |
6. | .8 . |
7. | 1.25 . |
8. | 1.3 . |
+------------+
. sort t s
. replace s = s[_n-1] if missing(s)
(4 real changes made)
. list, sep(0)
+------------+
| t s |
|------------|
1. | .5 .9 |
2. | .7 .9 |
3. | .8 .9 |
4. | 1.2 .85 |
5. | 1.25 .85 |
6. | 1.3 .85 |
7. | 1.5 .8 |
8. | 1.5 .8 |
+------------+
注意:sort
t
然后s
允许为同一s
复制已知的t
值。