отображение 6 лучших записей полей платежей в виде столбцов для каждой учетной записи

#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;