Sas Yrdif返回某些日期范围的意外值?
为了计算年龄,我在谷歌上搜索了一下,发现yrdif在9.3中进行了更新,添加了一个方便的“年龄”选项 然而,在使用它时,我注意到,当计算从1月1日到12月31日的日期跨度时,我们得到了一些意想不到的结果。示例:Sas Yrdif返回某些日期范围的意外值?,sas,Sas,为了计算年龄,我在谷歌上搜索了一下,发现yrdif在9.3中进行了更新,添加了一个方便的“年龄”选项 然而,在使用它时,我注意到,当计算从1月1日到12月31日的日期跨度时,我们得到了一些意想不到的结果。示例: age = yrdif('01Jan1932'd,'31Dec2012'd,'Age'); put age; 上面的结果是81年,而这一天应该比81年少一天(80.9972222)。但更令人惊讶的是,当我们将日期增加一天时,结果是: age = yrdif('02Jan1932'd,'
age = yrdif('01Jan1932'd,'31Dec2012'd,'Age');
put age;
上面的结果是81年,而这一天应该比81年少一天(80.9972222)。但更令人惊讶的是,当我们将日期增加一天时,结果是:
age = yrdif('02Jan1932'd,'01Jan2013'd,'AGE');
put age;
现在我们得到了期望值(80.997222)
臭虫?还有什么我不知道的事情吗?理想的下一步是简单地做地板(yrdif(dob,dod,'AGE'))来获得年龄,但这似乎并不那么容易。在9.3 TS1M2和9.4 TS1M2中,我得到了预期的结果:
1 data _null_;
2 age = yrdif('01Jan1932'd,'31Dec2012'd,'Age');
3 put age;
4 run;
80.997260274
也许这是一个固定的错误。搜索TS笔记找不到任何结果
在9.3+中,如果希望年数为整数,还可以使用INTCK正确计算年龄
age2= intck('YEAR','01Jan1932'd,'31Dec2012'd,'c');
结尾的“代码> > C”/代码>要求SAS考虑区间连续,从而正确处理内部差异。
data _null_;
age = yrdif('01Jan1932'd,'02Jan2013'd,'Age');
age2= intck('YEAR','01Jan1932'd,'31Dec2012'd,'c');
age3= intck('YEAR','01Mar1932'd,'01Jan2013'd,'c');
age4= intck('YEAR','01Mar1932'd,'01Apr2013'd,'c');
put age= age2= age3= age4=;
run;
在这里,3岁是正确的80岁,而4岁是正确的81岁;在过去,这是不正确的(两者都是81)。不错。我不知道
c
选项。