Stata 用有效的方法计算右连续步长函数
假设我有一个右连续阶跃(或阶梯)函数Stata 用有效的方法计算右连续步长函数,stata,Stata,假设我有一个右连续阶跃(或阶梯)函数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 我的数据可能与上面显示的类似,
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
的每个值,我们找到小于或等于r
的最大t
值,并将p
置于s
的位置
我的问题是:我如何有效地做到这一点?显然,对于每个r
-值,我可以执行以下操作:
gen diff=(r-t) if(r>=t)
sort diff
sum s if(_n==1)
但这不是我想要的,因为当观察的数量很大时,这是非常耗时的。我建议你稍微不同地思考你的问题,即你有
t
的新值,而s
是未知的;插值规则将替换为先前已知的s
。Stata术语中的程序写在中
注意:
sort
ing ont
然后s
允许为相同的t
复制已知的s
值 哇,太好了。非常感谢您提供了一个快速而有用的答案。与问题正交,但排序后如果n==1,则作为查看第一个值的方法,di s[1]
比sum s更直接、更有效。@NickCox:谢谢。我会记住的。
. 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 |
+------------+