Функция INTNX отлично подходит для дат. Вот два примера: одно подмножество с использованием шага данных и другое с использованием Proc SQL.
data dates(drop=i);
input date:DATE9. @;
do i = 1 to 4;
input name $ weight @;
output;
end;
format date mmddyy10.;
datalines;
05FEB2012 Barbara 125 Alice 130 Ronald 170 John 160
04FEB2012 Barbara 122 Alice 133 Ronald 168 John 155
15FEB2012 Barbara 135 Alice 140 Ronald 190 John 180
25FEB2012 Barbara 142 Alice 113 Ronald 178 John 185
29FEB2012 Barbara 185 Alice 170 Ronald 160 John 150
04MAR2012 Barbara 192 Alice 183 Ronald 178 John 165
;
Data _null_;
call symputx('beg_dt',intnx('month',today(),-1,'b'));
call symputx('end_dt',intnx('month',today(),-1,'e'));
run;
Data subset;
set dates(where=(&beg_dt <= date <= &end_dt));
run;
PROC SQL noprint;
CREATE TABLE subset_sql AS
SELECT *
FROM dates
WHERE &beg_dt <= date <= &end_dt;
QUIT;
INTNX генерирует значение даты. Интервал может отличаться от МЕСЯЦА (например, ГОД, НЕДЕЛЯ). Вы даже можете использовать его для определения финансового года с помощью YEAR.N (где N - это месяц, когда начинается ваш финансовый год).
Data _null_;
Current_FY=year(intnx('year.9',today(),0,'e'));
put current_fy=;
run;
Последний (необязательный) аргумент предназначен для выравнивания (начало, середина, конец или то же самое).