在 SAS 中计算特定年龄的人年

calculate age-specific person years in SAS

我的数据集是一组研究参与者(每个参与者一行),我有他们的出生日期(dob)、开始日期(sdate)和end/stop日期(edate)(sdate和edate是指参与研究的时期)。参与者可以根据他们在开始日期的年龄 (ageatstart) 分为年龄组,并且可以计算每个人为研究做出贡献的总人年 (py )。我现在想做的是将 'py' 分配给不同的年龄组,因为每个人都在变老(并且可能在研究期间改变年龄组)。

例如,如果我将我的年龄组定义为 <30、[30,39]、>39,则第一个参与者(贡献总计 10 py 的人 1 为SAS 代码如下所示)应该为年龄组 <30 贡献大约 5 年,对年龄组 [30,39] 贡献大约 5 年。

理想情况下,我想创建一组变量(例如 pyinagegroup1pyinagegroup2pyinagegroup3) 这将捕获每个人为每个年龄组贡献的时间(在我的 person1 示例中:pyinagegroup1=5, pyinagegroup2 =5, pyinagegroup3=0).

SAS 代码示例:

data py1;
  input dob :ddmmyy10. sdate :ddmmyy10. edate :ddmmyy10. id ageatstart ageatend py ;
  format dob ddmmyy10. sdate ddmmyy10. edate ddmmyy10.;
datalines;
05/03/1980 01/01/2005 31/12/2014 1 24 34 10.0 
12/08/2006 12/08/2006 31/12/2014 2 0 8 8.39 
19/09/1975 01/01/2005 20/12/2011 3 29 35 6.38
;

运行;

为什么不将数据集扩展为每人每年一条记录?

这只会忽略实际的 DOB,而是使用您的 AGEATSTART 变量,并在该 ID 的时间段内每年将其递增 1。

data py_expanded;
  set py1;
  do offset=0 to intck('year',sdate,edate);
    age=ageatstart+offset;
    sdate1 = max(sdate,intnx('year',sdate,offset,'b'));
    edate1 = min(edate,intnx('Year',sdate,offset,'e'));
    days = edate1-sdate1+1;
    py = days/(intnx('year',sdate,offset,'e')-intnx('year',sdate,offset,'b')+1);
    output;
  end;
  format sdate1 edate1 yymmdd10.;
run;

现在您可以将 AGE 分组到您想要的任何类别中,然后对新的 PY 变量求和。

PS 为什么你ID=3的PY值这么低?距离7年只差11天