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 on
t
然后
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 |
     +------------+