Stata如何根据出生日期计算实足年龄?

计算实足年龄,也就是计算周岁,是在科研工作中的一项基础技能。那么,在Stata中,我们是如何计算实足年龄的呢?

假设出生年龄bdate为2006年11月11日,调查日期sdate为2020年12月3日,系统日期cdate就是你计算的当日(这个日期在变化,所以本例中没有使用),我们先生成演示数据,命令如下:

clear
set obs 1
gen double bdate = date("11 November 2006", "DMY")
gen double sdate = date("3 December 2020", "DMY")
gen cdate=date("$S_DATE", "DMY") 
format bdate sdate cdate %td

计算方法1:手工算,年直接减,没过生日再减1岁。

gen age_int1 = year(sdate)-year(bdate)
replace age_int1 = age + 1 if (month(sdate)==month(bdate)&day(sdate)<day(bdate))|(month(sdate)<month(bdate))

注意:不要断行,上述是两行命令,第二行(replace这行)比较长,如果要多行的话,你可以加“///” ,如下:

gen age_int12 = year(sdate)-year(bdate)
replace age_int12 = age_int1 + 1 /// 
if (month(sdate)==month(bdate)&day(sdate)<day(bdate))|(month(sdate)<month(bdate))

说明:我们平时计算周岁年龄的时候就是这么算的,没有考虑过闰年。

计算方法2:使用每年365.25天进行校对。

gen age_fra2 = (sdate - bdate)/365.25
gen age_int2=int((sdate - bdate)/365.25)

说明:使用每年365.25天进行校对是流行病学研究里一个历史悠久的传统,是基于每四年一个闰年(多一天)的背景。在日常工作中精度足够,且易于记忆和操作,大家都这样做,结果也便于比较。

知识:地球绕太阳运行周期为365天5小时48分46秒(合365.24219天),即一回归年(tropical year)。公历的平年只有365日,比回归年短约0.24219 日,每四年累积约一天,把这一天加于2月末(即2月29日),使当年时间长度变为366日(2月29天),这一年就为闰年,其余三年是平年。

计算方法3:使用官方自带年龄函数age。

gen age_int3=age(bdate,sdate)
gen age_fra3=age_frac(bdate,sdate)

说明:age()计算整年,age_frac()计算精确的年。age()和age_frac()函数是Stata 16 Revision 05nov2020新增的日期函数,所以使用前请运行about命令查看,确保自己的Stata版本在 05nov2020之后。

计算方法4:使用社区命令personage。

//安装社区命令
ssc install personage,replace
personage bdate sdate,gen(age_int4 days_int4 yearday)
gen age_fra4=age_int4+days_int4/yearday

说明:age_int4是生日数,days_int4是最后一个生日至计算日(sdate)的天数,yearday是计算日所在的年的天数(365或366)。可以看出社区命令age_fra4的结果和官方函数age_frac()结果是一致的。

小结:推荐使用官方自带的日期函数,如果没有购买Stata 16的授权,Stata  8.2及以上的版本可以使用社区命令personage计算确切的年龄。