如何更改SAS代码以查找最大号码

如何更改SAS代码以查找最大号码,sas,Sas,我有一个像这样的数据集。我想创建另一个变量,它表示每天的总交易量。我的代码如下所示。但我的代码似乎有点问题,计算出的最大交易量N有点错误。谁能告诉我我的错在哪里 proc sort data = work.data; by time; run; data work.data; set work.data; retain I; by time; if first.time then I = volume; else I = I + volume; run; p

我有一个像这样的数据集。我想创建另一个变量,它表示每天的总交易量。我的代码如下所示。但我的代码似乎有点问题,计算出的最大交易量
N
有点错误。谁能告诉我我的错在哪里

proc sort data = work.data;
by time;
run;

data work.data;
    set work.data;
    retain I; 
    by time;
    if first.time then I = volume; else I = I + volume;
run;

proc sql;
    create table work.data2
    as select a.*,  max(I) as N 
    from work.data as a  
    group by time
    order by time;
quit; 

ID      Time        Volume
Apple   1/1/2001    1000
BP      1/1/2001    1500
AAL     2/1/2001    1130
Apple   2/1/2001    1000
BP      2/1/2001    1500
AAL     2/1/2001    1130
Apple   3/1/2001    1000
BP      3/1/2001    1500
AAL     3/1/2001    1130
你应该根据自己的情况选择最大值。比如:I=max(I);也可以通过一个proc-sql来尝试这一点

proc sql;
select * from (select time,sum(volume) as total from have group by time)   having total=max(total);
quit;

当我在示例数据集上运行您的代码时,我每天都会得到正确的最大值。你能把你意想不到的结果添加到帖子中吗?在这种情况下,我想可能是卷的格式有问题。在我的SAS数据集中,卷的格式是$52。长度不应该这么长。这会导致一些问题吗?是字符还是数字?在第一个数据步骤中,尝试执行
volume2=input(cats(volume),最好)
然后对
volume2
执行操作,以代替
volume2
。如果变量是字符,则根据字母顺序取最大值,因此9大于10。为什么要对数字变量应用字符格式?正如Alex所要求的-发布样本输入/输出。这不是OP所要求的。你得到的是最大总音量的时间,而OP想要的是每次最大音量。