Если вы определите месяц как 30 дней, вы округлите 15 дней или меньше до 0 месяцев, а 16 дней или больше до 1 месяца.
Это может быть достигнуто следующим:
data _null_;
format x y date9. z 8.;
x="14FEB09"d;
y="02MAR09"d;
z=round(intck('DAY',x,y)/31);
put x y z=;
run;
Вы также можете воспользоваться подходом, чтобы подсчитать полные месяцы («с первого 1-го по последний 1-й») в интервале, а затем сложить все оставшиеся дни, чтобы увидеть, составляют ли они до 0, 1 или 2 месяцев.
Как это:
data _null_;
format x y date9. z 8.;
x="01FEB09"d;
y="31MAR09"d;
if day(x)=1 then do;
z=intck('MONTH',x,intnx('MONTH',y,0,'BEGINNING'))
+ round((intck('DAY',intnx('MONTH',y,0,'BEGINNING'),y))/31);
end;
else do;
z=intck('MONTH',intnx('MONTH',x,1,'BEGINNING'),intnx('MONTH',y,0,'BEGINNING'))
+ round((intck('DAY',x,intnx('MONTH',x,1,'BEGINNING'))+intck('DAY',intnx('MONTH',y,0,'BEGINNING'),y))/31);
end;
put x y z=;
run;
Первый метод легче понять и поддерживать, но второй более точен для больших интервалов (с 01FEB06 по 01FEB09 составляет 36 месяцев, но метод 1 скажет вам, что только 35).