Как найти максимальное значение для динамического изменения наблюдений в салах?

поэтому у меня есть следующий набор данных с тремя переменными: счет, баланс и время.

account balance time
1 110 01/2006
1 111 02/2006
1 88 03/2006
1 61 04/2006
1 1203 05/2006
2 112 01/2006
2 111 02/2006
2 665 03/2006
2 61 04/2006
2 1243 05/2006
3 110 01/2006
3 111 02/2006
3 88 03/2006
3 61 04/2006
3 1203 05/2006

у каждой учетной записи больше записей. поэтому время начала может быть до того, что я написал, и время окончания может быть после того, что я написал.

поэтому мой вопрос:

Я пытаюсь найти максимальный баланс для каждой учетной записи в преклонном возрасте 12 месяцев. Например, для учетной записи 3 05/2006, я пытаюсь найти max (баланс счета 3 на 04/2006, баланс счета 3 на 03/2006, баланс 3 счета на 03/2006,............., счет 3-го счета на 04/2006).

что у вас на уме? что я сделал, это использовать функцию задержки с массивом. однако, это НЕ так эффективно. потому что я буду в беде, если мне понадобится предыдущие 120 месяцев.

Спасибо.

Лучший

Xintong

2 ответа

options mprint;
%macro lag;
 data temp (drop=count i);
 set balance;
 by acct time;
 array x(*) lag_bal1 - lag_bal3;
 %do i=1 %to 3;
 lag_bal&i=lag&i.(balance);
 %end;
 if first.acct then count=1;
 do i=count to dim(x);
 call missing(x(i));
 end;
 count+1;
 max_ball=max(balance, of lag_bal1-lag_bal3);
%mend;

%lag;


Попробуй это:

PROC SQL;
create table max_balance as
select *
from your_table
group by account
having balance=max(balance)
;
QUIT;

licensed under cc by-sa 3.0 with attribution.