2015-06-17 74 views
0

我有一個數據集看起來像這樣。我想創建另一個代表每天總交易量的變量。我的代碼如下所示。但似乎我的代碼有問題,計算出的最大交易量N在某種程度上是錯誤的。任何人都可以告訴我知道我的錯誤在哪裏。如何更改我的SAS代碼以查找最大數量

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 
+1

當我在您的示例數據集上運行您的代碼時,我可以在白天獲得正確的最大值。你可以將意外的結果添加到帖子中嗎? –

+0

在這種情況下,我想可能是音量格式有問題。在我的SAS數據集中,音量格式爲52美元。長度不應該這麼長。這會導致一些問題嗎? – fly36

+0

是「音量」字符還是數字?在你的第一個數據步驟中,嘗試'volume2 = input(cats(音量),最好);'然後在'volume2'上執行操作來代替'volume'。 –

回答

-1

您應該最大(I)作爲您的條件。例如:擁有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; 
+0

這不是OP所要求的。你得到的是最大音量總和的時間,而OP則需要每次最大音量。 –