计算实足年龄,也就是计算周岁,是在科研工作中的一项基础技能。那么,在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计算确切的年龄。