2016-01-05 61 views
0

我想拉回所有MAX實例給出的子集數據.... first.id或last.id不工作,因爲我想保留幾行同一筆交易。例如:SAS數據步驟:子集多行而不使用第一個/最後一個

TableView_of_Data

在這個例子中,我想突出顯示的行作爲輸出。我的數據有幾個FORM,QUARTER和CUST_ID我想以編程方式讓SAS根據FORM,QUARTER,CUST_ID回退最新數據

Last.DB_ID只返回1行。我需要具有相同DB_ID的所有行。

也這並沒有做任何事情:

data work.want; 
set work.have; 
by FORM Quarter Cust_ID DB_ID ; 
if Max(DB_ID) then output; 
run; 
+0

您已經使用Oracle和SQL爲其添加了標籤。爲什麼?數據是從數據庫中開始的嗎? –

+0

是的,數據存放在Oracle中,我可以通過SAS使用SQL從DW進行查詢。 –

回答

0

你需要通過你的數據做兩遍:一個以確定哪些最大值是該ID和一個發現具有最大的行值。

在數據步驟中執行此操作需要一個DoW循環,該循環每cust_id值運行一個數據步迭代,但兩次通過數據集。

data want; 
    do _n_ = 1 by 1 until (last.cust_id); 
    set have; 
    by form quarter cust_id; 
    if last.cust_id then max_db_value=db_id; 
    end; 
    do _n_ = 1 by 1 until (last.cust_id); 
    set have; 
    by form quarter cust_id; 
    if db_id = max_db_Value then output; 
    end; 
run; 

如果DB_ID按照您的示例進行排序,則可以使用該功能。如果沒有排序,你可以在當前存儲max_db_value比較當前DB_ID和DB_ID新的值賦給它,如果它是更高的,像

max_db_value = max(db_id, max_db_value); 

,而不是分配給它當last.cust_id是真實的。

+0

輝煌!這很有效,謝謝@joe –

相關問題