#sql #sas #proc-sql
#sql #sas #proc-sql
Вопрос:
У меня есть таблица, которая содержит поле учетной записи, соответствующее их последним платежам. например.
acc | lastpayment
1111 100.00
1111 150.00
1111 110.00
1112 111.00
1113 200.00
1114 300.00
Эти записи будут иметь дубликаты, поскольку они будут содержать учетные записи, на которые было произведено несколько платежей (например, в приведенных выше 3 лучших записях).
Я хочу отобразить только 6 лучших платежей для каждой учетной записи, а затем отобразить столбцы таблицы в виде
acc | lastpayment1 | lastpayment2 | lastpayment3 | lastpayment4 | lastpayment5 | lastpayment6
Возможно ли это?
Любая помощь была бы высоко оценена
Комментарии:
1. Если учетная запись имеет, скажем, 12 записей, какие 6 следует включить в общий макет? Первые 6 (если отсортировать по дате, они будут самыми старыми), последние 6 (если отсортировать по дате, они будут самыми новыми).
Ответ №1:
Создайте, view
который выбирает ‘N’ строк, которые вы хотите, для каждой группы, затем TRANSPOSE
представление
data top6;
set have;
by acc;
if first.acc the seq = 1; else seq 1;
run;
proc transpose data=top6 out=want;
by acc;
var lastpayment;
run;
или
Создайте пошаговое представление данных, содержащее массив и цикл DOW
data want (keep=acc lastpayment1-lastpayment6) / view=want;
do _n_ = 1 by 1 until (last.acc);
set have;
by acc;
array payments lastpayment1-lastpayment6;
if _n_ <= dim(payments) then
payments(_n_) = lastpayment;
end;
run;