На самом деле вы можете достичь этого, используя 'by groupformat' для вашего исходного набора данных, отформатировав поле datetime как 'dtmonyy5.' Как следует из названия, эта группа группируется по форматированным значениям вместо оригинальных.
data new1;
set old;
format datetime dtmonyy5.;
by groupformat datetime;
if last.datetime;
run;
Другим методом является использование Proc Summary, хотя это может занимать много памяти, особенно при работе с большими наборами данных. Вот код.
proc summary data=old nway;
class datetime;
format datetime dtmonyy5.;
output out=new2 (drop=_:) maxid(datetime(_all_))=;
run;
Просто быстрое примечание к предыдущему ответу, функция 'month' работает с полями даты, а не с datetime, поэтому вам нужно добавить функцию datepart в строку.
month = month(datepart(datetime));