Re: [問題] SAS跑大量資料所需的時間

看板Statistics作者 (歐吉桑留學生)時間15年前 (2009/03/18 22:45), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串8/9 (看更多)
※ 引述《liton (歐吉桑留學生)》之銘言: : 標題: Re: [問題] SAS跑大量資料所需的時間 : 時間: Wed Mar 18 01:30:47 2009 : : ※ 引述《azimuth ()》之銘言: : : ※ 引述《liton (歐吉桑留學生)》之銘言: : : 原始資料: 6年交易紀錄76,113,236筆 (不用懷疑!) : : 光是用一個PROC SQL篩出一個帳戶的資料就耗掉快3分鐘 : : 簡化的程序如下: : : PROC SQL ; : : CREATE TABLE no39 AS : : SELECT *, : : PUT(var1,DATE9.) AS time1 LENGTH=9 LABEL="時間1" , : : PUT(var2,MONYY7.) AS time2 LENGTH=7 LABEL="時間2" , : : var3 AS time3 FORMAT=TIME. LABEL="時間3" , : : var4 AS time4 FORMAT=TIME. LABEL="時間3" : : FROM readall49 : : WHERE acc_no=39; : : QUIT; : : PROC SORT DATA=no39 ; : : by var1 var2 var3 var4 ; : : RUN; : : 1.你浪費太多時間在acc_no ne no39上 : 先用acc_no篩選資料看看 : 然後再來處理那些數值運算 : : 2.需要sort嗎? : 塞order進去sql不就好了? : : -- : ※ 發信站: 批踢踢實業坊(ptt.cc) : ◆ From: 118.167.189.144 : → west1996:where不是會比數值運算先執行? 03/18 07:46 抱歉 前篇快睡著了沒說清楚 我前面兩篇有說到一個技巧 搜尋數字會比搜尋文字快 如果acc_no真的是數字 那這技巧又沒用 但一般而言 帳號資料會是文字格式 所以我的建議是先做個數字編碼的對照表 例如: acc_no key "A122342231" 1 "B211324121" 2 然後塞回readall49 當然前提是你不是在你最重要的moment來執行這一段 而是先前在做資料大表或universe的時候就搞定 然後到時候先找出對照表的key再去搜尋 : 推 azimuth:我知道可以把sort跟sql合寫.而"先用acc_no"篩選readall49 03/18 10:14 : → azimuth:的意思我不太懂 有什麼具體做法嗎? 請大大指教 謝謝 03/18 10:14 : → azimuth:另外我是按acc_no大小從readall49抓出觀察值,如果我先對 03/18 10:16 : → azimuth:readall49按acc_no排序 這樣系統處理會比較快嗎? 03/18 10:16 sort最有效的地方 是在資料合併的時候 如果你的資料是 A table B table key column_A key column_B 1 ada 6 jjl 3 dsa 3 enco 2 dsaf 2 3da SQL在串的時候可是 A table的key掃完全部B table的key 也就是1->6 1->3 1->2 3->6 3->3 3->2 .... 但是如果先sort再merge 掃的流程是 1X 2->2 2X 3->2 3->3 3X 所以在你的情況下 有沒有sort完全沒差 不然你這段程式用SAS data寫的話 SAS會擋你嗎? 執行一大堆SAS指令 出現error說你沒先 sort而檔掉你程式就是這原因 效率差的程式SAS是會擋的 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.167.189.144
文章代碼(AID): #19mGa4L0 (Statistics)
討論串 (同標題文章)
文章代碼(AID): #19mGa4L0 (Statistics)