互聯網金融,SAS工具使用心得

誤打誤撞的選擇了數據分析職業路線後,轉眼在我司的風控策略管理部工作近一年了。從這份工作開始接觸和學習使用SAS,到現在能基本應付部門老大的各種臨時需求,整個過程中,也走了很多彎路,也經歷了極其菜鳥的漫長找bug階段,也逐步培養了一點點數據分析者對數據的基本敬畏之心和數據不一致時的解決問題之道(本該一樣的結果就應該一模一樣,不可以因為差距很小就放過,警惕數據的蝴蝶效應!),給自己一個階段總結,也給路過的朋友一點借鑑,不算經驗,只是經歷,見仁見智,供大家參考。

互聯網金融,SAS工具使用心得

以SAS為舟闖金融

我們部門老大是法國留學的統計學專業背景,具有金融行業大銀行工作經驗,所以極其習慣於用SAS,部門遺留的歷史腳本幾乎都是用SAS,所以,要想繼承我部門的歷史經驗,掌握SAS,至少看懂SAS是必須面對的問題,否則無解。老大是個極其細緻(較心細如髮還要多一層)且極看重效率和產出成果的人,但是即使這樣,他也耐下心給了我一個月的時間用來熟悉各項工具,看書學習,很少量的安排工作。

首先,我先看了老大曾甩給前同事的書《the little sas book 中文版》,不長,也就一百多面,而且包括有宏的內容,我用了1周看完,又用了一段時間重複一遍,整理了一些筆記(有道雲筆記)。但是,說實話,我對本書無感。一是,本書是翻譯的版本,有很多地方語言生硬,讓人感覺不夠友善,整體就給我留下了不喜歡的印象;二是,本書內容太簡短,雖然內容全,但講解十分簡略,或者只有“要怎麼做”,而沒有“為什麼要提出這個話題”,“這麼寫每部分的詳細講解”;三是,版式粗糙,代碼有些模糊,且全為大寫字母書寫,剛開始接觸代碼的我心裡總覺的距離感太強,不太接受。說了這麼多缺點,看完後還是勉強初步接受了SAS的界面,能看懂最常用和基本的語句了。但至此,還沒幹具體的活,對SAS語法沒有切身的感受,只是浮於紙面,停留在眼睛會的階段。這個階段花了大致一個多月的時間。現在想來,本階段進入了一個坑:太簡略、不太符合自己胃口而學習效率不高的書,不應該花費太多時間,強迫自己看,不僅效率極低,還很容易生出自己心理上的厭倦感或者畏難情緒。

然後,我開始陸續閱讀和工作中嘗試使用SAS,至此,動手的時候才發現,極其狼狽,語法都不熟悉,細節都不記了,大腦空白,F3運行後各種bug。我尷尬的向同事諮詢,他們推薦給我當字典搜索的書:《SAS編程技術教程(朱世武)》。不得不說,這本書柔和友善多了,至少是中國人寫的,語言平實易於接受,內容充實有序,能解決我之前看書的很多很多疑惑。我嘗試閱讀幾天後,如獲至寶,後悔之前花了這麼久看的書,感慨之前簡直是浪費了時間。但是本書有561頁,我不得不在工作日下班後滿腦疲憊的繼續看1h書,週末也總是想著這個學習任務而不曾敢好好放鬆,而晚上學習效率不高、戰線拉的長,帶來的結果就是看了後面忘了前面。更可怕的是,我看書習慣於看多遍,所以不看完2遍簡直不敢告一段落。本階段花了好幾個月的時間。但不得不說,本階段又進入另一個坑:用力過猛,事無鉅細而導致貪多嚼不爛。

洋洋灑灑都快半年了,SAS進展還是不大,工作中極低的效率和較大的出錯率,讓老大咆哮不已。一度讓我產生了離職的想法。當然,離職的原因,不僅是接連的老大發火,而且還有原因在於我們公司是初創公司,工作量大,而人手嚴重不足,大家都拿出上高中的狀態在工作,再加上我們老大要求極嚴且脾氣極差,幾乎每天我都要被吼罵,要麼是工作出錯,即使沒出錯,也罵我動作太慢。而老大忙於自己的工作,當我遇到困難或者問題,無人可以問,只能釘在原地乾著急,發慌而無助。

再然後,新進來一個同事,是SAS建模老手,雖然年齡不大,但是專業出身+工作經驗豐富,還是個女生,我好意思主動請教。她推薦我了一本紙質書:《SAS v8基礎教程》。這次,我下定決心在淘寶上買下紙質書,拿出學生學習的認真態度。花了1個月看完。這本書也是經驗豐富的中國人寫的,語言平實易懂詳略得當,內容也較全,也不長(也是500多頁,但是每頁比較稀疏,一天能看幾十頁的那種,且很多內容是同一操作的多種實現方式,可以選擇性看,閱讀沒有壓力),非常實用易懂。至此,我使用的SAS的學習資料就沒再增添了。這本書我感覺很受用,紙質書的學習方式也很推薦。供各位知友參考和選擇性借鑑。

SAS是面向過程的語言,與面向對象的語言不同,語句在一個數據步和過程步內要留意語句書寫先後順序。這裡,不談具體細節的語法,之談我使用後的宏觀感觸;我覺得SAS使用過程中主要是這幾個問題:

① 瞭解PDV原理及程序運行順序。雖然語法很多,比如set 多個數據集、雙set語句,@與@@的區別,set和infile+input的使用,等等。但是,自己心裡要把複雜問題簡單化,SAS系統運行原理弄清楚,就知道怎麼對待不同原始文件、怎麼一條條導入、每條觀測執行後輸出的,弄清楚了就不需要記憶了,通過理解原理來減少記憶負擔。

② 通過閱讀日誌文件,糾錯排除BUG的能力。我剛開始用SAS,對log窗口並不重視:如果能完成運行,就不會去管LOG內容,如果報錯、運行的結果文件為空文本,才會去翻log,而且也只看log中標紅的ERROR內容。現在看來這是極其不對的。現在,執行完一段程序後,哪怕能執行到最後一步,我也打開日誌,先ctrol+F,搜索全文是否含error;然後,從頭看一遍日誌,不能出現:字段未初始化,merge中by值有多個重複值等等內容,也就是說,warning也不要有,應該只是乾乾淨淨的,比如不同數據集多少觀測。

互聯網金融,SAS工具使用心得

沙裡淘金找BUG

一旦真的出現運行結果非自己預期、數據不一致的情況,就要找BUG了。找問題,包括顯性問題和隱性問題,顯性的就是log日誌裡面找語法報錯或警告的內容;隱性的問題,就是指能正常運行但是結果不對的情況。這時,指導思想就是:語句一塊一塊的跑,跑完後導出明細後找原因,跑出來的結果,可以導出excel後用match函數匹配兩列,也可以不導出,直接對兩個數據集,用merge語句+in選項,匹配一下,in數據集A and not in 數據集B,就可以了。

再說一句,剛開始處理bug,遇到就緊張,長時間找不到原因就心煩,核對良久後,甚至覺得我沒有毛病,是SAS系統不穩定導致,或者認為這個問題我排除不了,產生畏難和退縮的傾向。現在我認為,SAS系統是很穩定的,它的年齡比我的年齡都大,一定不是系統出錯,而是有原因的,而原因一定是可以找到和解決的。現在多了些信心和決心。

③ 學會使用統計性函數proc means,proc freq等等。剛開始,我只是純純使用data步:導入文件、處理文件,proc export導出PC文件,全是明細數據。導致的結果是:導出的底表文件很大,動則幾千萬條甚至1G以上,會產生預料之外的問題:SAS導出時刪除失敗,excel作透視的時候會很卡甚至頻頻崩潰;而且,若導出前沒加工過,都依賴excel作進一步操作,有點像半自動洗衣機。後來,經提點,我導出前都用宏+proc means語句進行彙總,將變量分類為class 和 var,定義為宏變量(主要是方便後期修改調整,更靈活),然後用宏進行彙總輸出。明顯可以減少導出條數。

④ 性能優化+減少出錯可能性。使用一段時間、熟悉了基本的語句規則後,就要留意學習一些細節,來提高工作效率了,包括減少等待運行時間和便於後期維護。比如,做篩選的時候,能用where語句就不用if語句;常用的定義邏輯庫及一些指令設置,可以寫入文件“autoexec.sas”,讓SAS啟動時先自動運行;多用keep或drop語句,去掉不需要的字段,減少數據集的無用字段;字段定義都用format語句,儘可能少用默認操作,增加對SAS的控制;嘗試多使用宏;嘗試培養字母大寫的書寫習慣,等等。

要減少出差,有一點就是:能在導出前用code解決的,都寫代碼解決,而不是導出後手動操作篩選或者點擊。所以,對想要的量都先處理好,要做的篩選都先定義新變量flag,儘可能較少手動。

囉嗦了半天,也都是些大而泛的內容;可能因為SAS是我第一個深入接觸的語言,現在看著SAS系統界面的code,越看越覺得清秀美觀,非常喜歡這個語言,即使它和新生代大熱語言例如Python相比,有些弱點。使用了數據分析工具後,不得不說,SAS比單純SQL處理數據方便很多:語句更直接,邏輯更簡明,操作更方便,如果是MySQL,就需要反覆的嵌套子查詢、像蘇州園林那麼層次複雜;而且SAS處理數據速度更快。不得不說,工具的優化還是很有必要的。

互聯網金融,SAS工具使用心得

從來沒有準點下班

洋洋灑灑這麼些字,算是互聯網金融行業工作1年的一點總結。也算是積累了這麼久的汽車行業融資租賃知識,之前頭大的vintage分析、截面DPD30+,遷徙率,授信額度、不良、壞賬、觀察期、表現期,在貸本金/在貸餘額,應還本金、已還本金、逾期本金等等的計算方法,也終於理清楚了。工作時間久了,對金融行業也有了一定的感情,今後如果不從事這一方面了,會不會浪費了這一年的焦慮、捱罵和加班呢,哈哈。


分享到:


相關文章: