I'm not aware of any standard way of doing this, and I'd be interested to understand why you want to see months in this way as I can't think off-hand of a reason for using this. However, maybe something like the below will help. The variable month3 is a single-line version of the rest, which I left in to help make the calculation more clear. Presumably it could be tidied up a bit more... data test; format date1 date9.; format date2 date9.; date1 = '09FEB2011'd; do i = -60 to 60 by 5; date2 = intnx('day',date1,i); output; end; run; data test; set test; months = intck('month',date1,date2); temp = intnx('month',date1,months,'sameday'); days_shift = intck('day',temp,date2); days_in_month = day(intnx('month',date2,0,'end')); month2 = months + days_shift/days_in_month; month3 = intck('month',date1,date2) + intck('day', intnx('month',date1,intck('month',date1,date2),'sameday'),date2) / day(intnx('month',date2,0,'end')); run; To look at an example then (UK dates): Date1: 09/02/2011 Date2: 06/03/2011 Using intck will say there is 1 month interval between the two, so Month = 1; Temp is set to Date1 + Month, but to the same day, hence Temp = 09/03/2011. There are -3 days between Temp and Date2, hence Days_Shift = -3. There are 31 days in March, therefore Days_in_Month = 31. Adding this together then says 1 full month, minus 3 days (which we take as the fraction 3 / 31), which is 28 / 31 or 0.9032 months. The fraction element is determined by the number of days in the month of Date2, and it should work regardless as to which date is greater.
... View more