BookmarkSubscribeRSS Feed
deleted_user
Not applicable
YRDIF seems to be returning inexact results for me.

If I run the following in a data step:
test1 = yrdif('07JAN2000'd,'07JAN2001'd,"ACT/ACT");
test2 = yrdif('06JAN2000'd,'07JAN2001'd,"ACT/ACT");
test3 = yrdif('08JAN2000'd,'07JAN2001'd,"ACT/ACT");
test4 = 365/365;
and then do a Proc Freq on the results, I get:
Test1=1.0000449135
Test2=1.002777154
Test3=.9973126731
Test4=1

Test2 and Test3 are very close to what I'd expect (within floating point constraints) but I'd expect Test1 to be exactly 1. So what am I doing wrong?

Jeff
3 REPLIES 3
Peter_C
Rhodochrosite | Level 12
deleted_user
Not applicable
Well, that explains it! Thanks!

Jeff
ArtC
Rhodochrosite | Level 12
When the period includes a leap day, YRDIF adds the leap day and then averages it across four years (third arg is 'actual' or 'act/act'). If you are estimating a span of years then the value is off by a fraction of a day. This seems to be incrementally better than the (stop-start)/365.25 formula. Incrementally because either way the differences tend to be in the third decimal place.

hackathon24-white-horiz.png

2025 SAS Hackathon: There is still time!

Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!

Register Now

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 3 replies
  • 1275 views
  • 0 likes
  • 3 in conversation