2015-09-21 85 views
-1

我怎樣才能拉一個變量的最後一個觀察沒有排序在SAS?有誰知道我可以如何使用SQL查詢完成此操作。我理解的方法是使用SAS中的last.variable,但不能對錶進行排序以獲得期望的結果。謝謝。拉最後的觀察變量

+0

SQL很可能會在後端執行排序而不告訴您(除非您要求計劃)。你是爲了表現的目的而試圖避免這種情況,還是你不想排序,因爲它已經按照某種東西排序了,並且你希望排序方法中的'last.variable'?如果你想獲得有用的幫助,請發佈一些示例數據'有'和'想要'。 – Joe

回答

1

更新,以更好地回答澄清

後的問題,如果你有沒有日期的事務數據集,但需要得到每個ID最近的事務,你可以創建一個計數器,它可以讓你找到最近的交易。

ID 
2 
1 
4 
1 
2 
2 
4 

第1步:使用sum statement

data have2(compress=yes); /* Dataset is compressed due to size */ 
    set have; 
    transaction_nbr+1; 
run; 

爲每個交易計數器這將產生:

ID transaction_nbr 
2 1 
1 2 
4 3 
1 4 
2 5 
2 6 
4 7 

步驟2:選擇最大交易數量的新數據集

proc sql noprint; 
    create table want as 
     select ID, transaction_nbr 
     from have2 
     where transaction_nbr in(select max(transaction_nbr) from have2 group by ID) 
     order by ID; 
quit; 

你的數據集現在應該包含最新的交易每ID:

ID transaction_nbr 
1 4 
2 6 
4 7 

在這裏,你所得到的一切都在一步。由於您創建了自己的計數器,因此where聲明中的子查詢將保證所選事務是最新的。

+0

你好斯圖,這沒有用。讓我再解釋一遍。該表是沒有時間戳的事務表。所以,如果我試圖拉最後的交易,我沒有日期參數使用。所以我需要爲該變量提供最後一筆交易。我拉數據後,有一個地方,我檢查一些id號碼,以檢查它的正確性。 –

+0

但是,當我運行此代碼它的工作原理:data temp; set life end = last; 其中master_id =「xxxxxxxx」;如果最後一次是 ; 跑;因爲它是一個很大的數據集,所以我不能使用where語句來存儲我需要的所有ID。我已經嘗試了最後一個變量(排序和未排序),但沒有工作 –

+0

數據集有多大?如果您可以將兩個數據集合並在一起,那麼您可以一步完成。您可能想嘗試使用PROC SQL。我將更新上面的代碼以包含此內容。 –