Вам необходимо проверить, находитесь ли вы в последней строке учетной записи (требуется, чтобы данные были отсортированы по учетной записи). Затем преобразуйте строковые месяцы в числа, переберите их и выведите новое имя месяца.
EDIT
Исходя из комментариев, этот шаг данных будет работать с вашими данными. Сохранил старый ответ для дополнительной информации:
data want;
set have;
by account;
output;
if last.account then do;
/*Current month as a number*/
month_n = month(MonthDate);
/*LastMonth as a number*/
to_month = month(LastMonthDate);
do i=month_n+1 to to_month;
month = put(mdy(i,1,2000),monname3.); /*Increment the month and write the month name*/
output;
end;
end;
drop month_n to_month i;
run;
Конец РЕДАКТИРОВАТЬ
К сожалению, в SAS нет простого формата или информации для преобразования между месяцами в виде строк и чисел. Поэтому здесь я делаю их даты и извлекаю номер месяца с помощью функции month()
:
data want;
set have;
by account;
output;
if last.account then do;
/*Current month as a number*/
month_n = month(input(catt("01",strip(month),"2000"),date9.));
/*LastMonth as a number*/
to_month = month(input(catt("01",lastMonth,"2000"),date9.));
do i=month_n+1 to to_month;
month = put(mdy(i,1,2000),monname3.); /*Increment the month and write the month name*/
output;
end;
end;
drop month_n to_month i;
run;
Вы всегда можете создать свой собственный формат и информацию для преобразования. Это сделает код немного чище.
proc format;
value MName 1="Jan"
2="Feb"
3="Mar"
4="Apr"
5="May"
6="Jun"
7="Jul"
8="Aug"
9="Sep"
10="Oct"
11="Nov"
12="Dec";
invalue MName "Jan"=1
"Feb"=2
"Mar"=3
"Apr"=4
"May"=5
"Jun"=6
"Jul"=7
"Aug"=8
"Sep"=9
"Oct"=10
"Nov"=11
"Dec"=12;
run;
data want2;
set have;
by account;
output;
if last.account then do;
/*Current month as a number*/
month_n = input(month,MName.);
/*LastMonth as a number*/
to_month = input(lastMonth,MName.);
do i=month_n+1 to to_month;
month = put(i,MName.);
output;
end;
end;
drop month_n to_month i;
run;