Maybe I'm doing something wrong, but the SAS YrDif function doesn't appear to work correctly for persons born on a February 29th. For example, if you run the below cited code, YrDif with a parameter of 'AGE' will return 52 on 28 Feb 2016 for a person born on 29 Feb 1964. The correct age is 51 (they would turn 52 the following day). A slightly more complex routine follows the YrDif function which calculates the age correctly. Output is shown below the code.

DATA _NULL_;
birthDate = '29FEB1964'd;
asOfDate = '28FEB2016'd;

/** This simple age calculation will correctly calculate the age of everyone *except* those born on a February 29th. **/
AgePerSAS = INT( yrDif(birthDate, asOfDate, 'AGE') ) ;

PUT 'NOTE- ' ;
PUT 'NOTE- ' ;

PUT 'NOTE: BirthDate = ' BirthDate MMDDYY10. ;
PUT 'NOTE- AsOfDate = ' AsOfDate MMDDYY10. ;
PUT 'NOTE- AgePerSAS = ' AgePerSAS;

/** This more complex age calculation will correctly calculate the age of everyone *including* those born on a February 29th. **/
ActualAge = floor (
( intck('month',birthDate,asOfDate) -
( day(asOfDate) < day(birthDate)) )
/ 12 ) ;

PUT 'NOTE- ActualAge = ' ActualAge;

PUT 'NOTE- ' ;
PUT 'NOTE- ' ;

RUN &Control_Value;

Output:

NOTE: BirthDate = 02/29/1964
AsOfDate = 02/28/2016
AgePerSAS = 52
ActualAge = 51

NOTE: DATA statement used (Total process time):
real time 0.00 seconds
cpu time 0.00 seconds

Regards,

Jim