我正在處理一個大型數據集(3000萬行),我需要拉最近的三個日期(可能有不確定數量的行連接到它們)所以就像03MAR2016可能有2行27FEB2016可能有10行,25FEB2016可能有3行。我怎麼說「選擇所有屬於該集合中最後X個值的所有內容,而不管有多少行」?如何拉出SAS SQL中最後N個日期數
2
A
回答
1
正如你不能在在線模式排序/子查詢,你將有兩個部分來分割你的SQL語句:
- 排序日期倒序排列,並獲得不同的值
- 加入回原始數據和限制在前3
但是如前所述,SQL不擅長這種操作。
DATA input_data ;
INPUT date value ;
CARDS ;
20160101 1
20160101 2
20160101 3
20160102 1
20160103 1
20160104 1
20160105 1
20160105 2
20160105 3
;
proc sql _method;
create table DATE_ID as
select distinct DATE
from input_data
order by DATE DESC;
create table output_data as
select data.*
from (select *
from DATE_ID
where monotonic() <= 3
) id
inner join input_data data
on id.DATE = data.DATE
;
quit;
1
您需要將其分解爲兩個任務。
- 確定哪些日期是最後三個日期
- 拉離這些日期的所有行
在SQL兩者都是可能的,但首先是更容易使用其他方法(SAS的SQL不非常擅長獲得「第一個X的東西」)。
我會建議使用像PROC FREQ
或PROC TABULATE
東西生成日期列表(只是日期變量PROC FREQ),任何真正的PROC你舒服 - 即使PROC SORT
將工作(儘管這可能是低效率) 。然後,一旦擁有該表,將其限制爲三個最高的觀察值,然後您可以在SQL步驟中使用它來加入主表並篩選這三個日期 - 或者您可以使用其他選項,如創建自定義格式或散列表或任何適合你的東西。但是,我認爲,3000萬行不是那麼多,SQL連接應該成爲問題。
相關問題
- 1. SQL按日期獲取最後n個唯一條目
- 2. 單數日期數據表中連續日期的SAS SQL輸出範圍
- 3. SAS PROC SQL與最近的日期特定日期
- 4. 將SQL日期轉換爲SAS日期
- 5. SQL:獲取一系列日期中的最後一個日期
- 6. 最後n個工作日在sql中,其中clausel
- 7. SQL Server的最後日期
- 8. SAS SQL日期格式
- 9. SAS日期 - SEMIYEAR在PROC SQL
- 10. 如何返回sql server中最後3個日期?
- 11. SQL - 最後日期時間
- 12. 如何根據SQL中的GETDATE()輸出最後和下一個日期
- 13. 日期函數SAS
- 14. 獲取最後一個Java日期/日曆的最後日期
- 15. SAS yyyymmdd到月份的最後一個日期
- 16. 如何從單個日期列返回最後一個日期?
- 17. T-SQL從日期列中選擇每第n個日期
- 18. SQL找出在最後n分鐘
- 19. 過濾熊貓數據幀的最後n日期
- 20. SAS:使用PROC SQL將日期變量寫入SAS數據集
- 21. 如何獲取SQL Server數據庫的最後訪問日期?
- 22. 如何提供SAS中兩個日期之間的天數
- 23. 如何從日誌文件中保留最後n個行php
- 24. 如何在SAS中查詢日期
- 25. SQL找到最後日期和事件
- 26. SAS - 如何從數據集中獲取最後的'n'觀察值?
- 27. 拉最後一個星期五的日期
- 28. 如何得到兩個日期的最後日期SSRS
- 29. 從SQL Server 2005的日期列中選擇最近日期和最後一個日期
- 30. 如何在sql中的兩個日期之間列出數據?
它將取決於您的數據庫結構,到目前爲止您嘗試過什麼? – ArturoAP
這在原生SAS SQL中非常困難。我建議你使用數據步驟,用'retain'。 –
@GordonLinoff我想象一個數據步驟不會很好,除非你使用DoW循環,這看起來像是過度殺傷? – Joe