如何在sas中动态改变观测值中找到最大值?

时间:2014-03-10 20:52:28

标签: sas group-by

所以我有以下数据集有三个变量:帐户,余额和时间。

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个月前找到每个帐户的最大余额。例如,对于2006年5月的账户3,我试图找到最大值(账户3余额为04/2006,账户3余额为03/2006,账户3余额为03/2006,........ .....,账户3余额于04/2006)。

你在想什么?我所做的是使用数组的滞后函数。但是,效率并不高。因为如果我需要前120个月,我会遇到麻烦。

谢谢。

最佳

新通

2 个答案:

答案 0 :(得分:0)

试试这个:

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

答案 1 :(得分:0)

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;