Sas Yrdif返回某些日期范围的意外值?

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,'

为了计算年龄,我在谷歌上搜索了一下,发现yrdif在9.3中进行了更新,添加了一个方便的“年龄”选项

然而,在使用它时,我注意到,当计算从1月1日到12月31日的日期跨度时,我们得到了一些意想不到的结果。示例:

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
选项。