误打误撞的选择了数据分析职业路线后,转眼在我司的风控策略管理部工作近一年了。从这份工作开始接触和学习使用SAS,到现在能基本应付部门老大的各种临时需求,整个过程中,也走了很多弯路,也经历了极其菜鸟的漫长找bug阶段,也逐步培养了一点点数据分析者对数据的基本敬畏之心和数据不一致时的解决问题之道(本该一样的结果就应该一模一样,不可以因为差距很小就放过,警惕数据的蝴蝶效应!),给自己一个阶段总结,也给路过的朋友一点借鉴,不算经验,只是经历,见仁见智,供大家参考。
以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也不要有,应该只是干干净净的,比如不同数据集多少观测。
沙里淘金找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处理数据速度更快。不得不说,工具的优化还是很有必要的。
从来没有准点下班
洋洋洒洒这么些字,算是互联网金融行业工作1年的一点总结。也算是积累了这么久的汽车行业融资租赁知识,之前头大的vintage分析、截面DPD30 ,迁徙率,授信额度、不良、坏账、观察期、表现期,在贷本金/在贷余额,应还本金、已还本金、逾期本金等等的计算方法,也终于理清楚了。工作时间久了,对金融行业也有了一定的感情,今后如果不从事这一方面了,会不会浪费了这一年的焦虑、挨骂和加班呢,哈哈。
Copyright © 2008-2022 秒下下载站
m.down10s.com .All Rights Reserved