如何在SAS中基于现有数值型出生日期变量创建年龄变量?
SAS中基于出生日期计算年龄的正确方法
关于出生日期负数值的说明
SAS的日期变量是数值型存储,默认以1960年1月1日作为基准点(对应数值0):
- 1960年1月1日之后的日期,存储为正数
- 1960年1月1日之前的日期,存储为负数
你看到的-15226、-8803这类值,就是因为对应的出生日期在1960年1月1日之前,这是SAS日期存储的正常规则,不用额外处理,直接用于计算即可。
计算年龄的正确代码
直接用今日日期减出生日期得到的是天数差,不能直接作为年龄。推荐用SAS内置的YRDIF函数,它会准确计算两个日期之间的周岁差,还能考虑生日是否已过:
方法1:计算精确周岁(推荐)
data 新数据集名; set 原数据集名; /* 计算带小数的周岁,比如25.3岁 */ age = yrdif(BORN, today(), 'AGE'); /* 若需要整数年龄(只算已过的完整生日),用INT函数取整 */ age_int = int(yrdif(BORN, today(), 'AGE')); run;
TODAY()函数用于获取当前系统日期,和DATE()函数等价- 第三个参数
'AGE'表示按周岁规则计算,只有当当前日期过了当年生日,年龄才会加1
方法2:粗略估算年龄(不推荐,仅作参考)
如果只是需要大致的年龄,可以用天数差除以年均天数365.25(考虑闰年),但这种方法在生日前后可能出现误差:
data 新数据集名; set 原数据集名; age_approx = (today() - BORN)/365.25; age_approx_int = int((today() - BORN)/365.25); run;
内容的提问来源于stack exchange,提问作者Joy Y. Zhu
相关产品推荐
相关产品推荐

