星期五, 7月 17, 2009

sas index製作 可取代耗時耗資源的proc sort

週五要報告進度 週四寫好程式
想說讓他在伺服器跑一個晚上 應該能跑好
早上上班整理就能過關 沒想到早上一來 就是斷線的消息~

工作以來資料量越來越大
學生時期 還在說 超過1G 的資料很難處理
現在 都是上百G的...

進度要報告的原始資料 大概是17G左右
看過幾百G的時候 就覺得10幾G不算啥
而且要用的變數也不多 所以刪減之後 也不過1G左右
所以 寫程式也沒有多擔心~

但是!! 程式當中還是有幾個排序的動作
SAS PROC SORT這個超花時間的程序
就是他!!  當學生的時候
總是可以寫完程式 就看日劇 電影 打三國無雙
玩完之後 數據也大概整理好了

現在上班 沒有這些東西阿!!!
我還是要裝忙(誤)

唉 本來已經想跟老闆投降說 做不出來了
後來想想之前 老闆的前助理有講過INDEX這東西
可以幫資料創一個號碼
執行起來 比PROC SORT快很多

我也找過相關資料研究一下
有技術文件說 大概只要1/3的時間 就能完成PROC SORT的動作
但是 做好INDEX之後 要怎麼SET MERGE卻沒有說清楚

現在 遇到這麻煩了 只好死馬當活馬醫
試試看 不成熟的INDEX

結果 技術文件騙人
不只可以省3倍時間 省更多!!!
(應該是 硬體技術成長了 技術文件 是在奔騰2的CPU環境
現在隨便都是雙核心)

所以 嗯 就能交差了~~大心

列一下 INDEX製作的語法

PROC datasets library=資料夾名稱;/*暫存的就寫WORK*/
modify 數據名城;
index create 變數;/*要排序單一變數時*/
index create 包裹排序變數代號=(變數1 變數2 變數3....);/*要排序多個變數時*/
RUN;

如果要merge
直接寫merge的語法就行了

merge 數據1 數據2;by 變數;

還有個變化型
例如 常用proc sort nodupkey 來排除重複值的
也可以利用

index產生後
寫一段
if 變數=lag(變數) then delete;
這樣就能達到相同的效果( 時間上快很多)





--
人土土金金金

沒有留言: