SAS

SAS, 一个华丽时代的结束

Posted by Qing on May 9, 2018

借此文章来纪念我3年的SAS programmer生涯。

我从2014年左右开始接触SAS。当时还在学校里面,学院里面比较流行的工具还是SAS,记得上流行病与卫生统计课,书本后面尽是一大串的SAS代码,作为一个医学生,第一次接触到是懵逼的,不过还好SAS有很好的伪代码性质,渐渐地能够读懂这些”神秘代码”。当时铁了心要直接就业,于是每天抱着SAS书和电脑跑到图书馆,边看书边码代码,休息时间便在人大经济论坛SAS板块看帖子,搜资料。后来临近找工作,又到了一家CRO实习,公司每天组织SAS培训,由此接触到了工业界对SAS的一些规范和需求。再到后来毕业后来到Pharma,至此变成了对SAS的重度依赖者。

印象深刻的是,第一SAS的data step有一个内循环,初学者不需要基本的循环知识就可以上手,第二可以把数据直接考到程序里面,不需要像其他软件那样需要指定路径,读取硬盘上的文件。所以SAS尤其我这样不是出身计算机相关领域,但是又想要做一些统计分析的业余选手。

刚开始工作那段时间,对SAS的神秘与好奇始终萦绕在我脑中,不分日夜地研究SAS的各个模块如SAS Base(DATA STEP/MACRO/SQL/ODS),SAS STAT,SAS ETS,SAS IML等等,研究的过程是充满挑战而且有趣的,需要不断探索,阅读SAS文档,翻阅各式各样文献,在网上论坛上查找解决问题的方法,以及想办法在项目中实际操作。然而,随着自己对整个SAS生态圈理解的深入,越来越觉得想要在SAS里面做些自定义的功能,困难重重。

而当我自学完CS的基础课之后,才恍然大悟,原来作为一个SAS programmer,我们充其量来说只是一个SAS用户,和开发根本沾不上边,而使用SAS的一些小技巧仅仅是一些小聪明而已。大多数人根本谈不上精通SAS(从统计意义上讲或许有人精通,你很难去精通一门本身往往有很多地方不通的语言)。从这个层面来讲,SAS programmer和类似的C programmer根本不可混为一谈。

因此,从很大程度上来讲,SAS只是一个工具,而且是一个有比较大局限性的工具。SAS的局限,最大的原因是其不可扩展性,以至于把所有的模块(Base/STAT/ETS/IML等等)弄过一遍就没有什么好学的了。SAS从上到下的设计,是想让用户更加舒服的使用,而不是让用户去探索和扩展。可以这样说,SAS完完全全地掌握着这个软件发展的生杀大权,这也极大地限制着SAS的灵活性。而Python、R等开源语言,其设计理念确与SAS恰恰相反,其可扩展性和灵活性,高度可定制化的功能以及高度活跃的社区,这让开源语言前所未有的繁荣,而层出不穷的包则完全颠覆你的想象。

当意识到这一点后,我便毅然地转向了开源社区。但是这并不意味着我会抛弃SAS,比较Python、R,SAS作为一个经过长期发展的统计软件,未必就没有自己的优势,例如SAS提供的产品显得成熟稳固,很多方面也更加标准,许多地方SAS仍会有用武之地,但是我坚信,未来开源的分析工具,会是主流!而属于SAS的时代已经结束,新的时代正在开启!

而如今,3年pharma职业生涯即将告一段落,前面是一片未知的旅程。感谢SAS帮我学会了统计和编程,伴我度过他乡的漫漫长夜。虽然属于SAS的华丽时代不会再有,但我仍会纪念开创那个时代的伟大的SAS程序员。Old SAS programmers never die, they just fade away.

最后借用SAS圈子中的一篇好文,SAS,一个华丽时代的结束(写文章和评论的是dapangmao和jingju11),借此文章来纪念我3年的SAS programmer生涯。


我很喜欢阅读此类的对于SAS作出横向的软件之间的对比以及纵向的回顾和预测性的文章,虽然其准确性和客观性本身往往很可能存在巨大之争议。从我个人的知识和经验来看,有几点也许需要澄清。

第一,什么是SAS程序员?我把其简单地对译为英语里的SAS Programmer

找了几年的工作,对于这个单词差不多耳熟能详或许刻骨铭心(有爱也有恨)。因为自己专业的限制,我只是简单地关心统计相关里的SAS programmer。据我所知,无论是银行,科研,医疗还是其他的类似机构等等,SAS programmer们其实只是在被动地使用SAS(一些技巧也只是小聪明而已哦),和开发根本沾不上边。而这部分人里,大多数人根本谈不上精通SAS(从统计意义上讲或许有人精通,你很难去精通一门本身往往有很多地方不通的语言。学统计的不在乎,因为其自身的编程逻辑往往是受赐于作为第一门语言SAS),因为使用充其量只是皮的部分,而且也只是皮的某个局部而已。而SAS“很简单”的理论也是从这部分人里有声或者无声发出的。因为他们正在触摸SAS最柔软光滑而令人倍感舒适的部分。从这个层面来讲,SAS programmer和类似的C programmer根本不可混为一谈。准确地讲,定义为SAS user应该更加准确一些。也是因为是使用者,我们反而具备了更大的灵活性,从而无虞于和SAS公司同命运。因为我们差不多在某种程度上都兼备了解EXCEL, R/SPLUS, SPSS, STATA等等软件的能力和基础。说白了,从SAS转到其他的统计软件大概只是月余而已(虽然还是不精通)。这是我的SAS工具论。

第二,SAS的奇迹绽放与统计学的发展密不可分。

统计经历了从‘因为不理解而忽视’发展到了‘即使不理解也采用’的阶段。举个例子:医学杂志。现在很难发现一家发表医学文章而不要求提供统计方法的杂志。十年以前可是迥然不同。Statistical Editor是个蛮崭新的职位。直到现在它的设立也存在着很大的争议。从直观上讲,概率的意义已经变得很容易理解而且深入人心,虽然常常充满在某种程度上的误读。一个事实是,现在没有人会幼稚到去反驳任何的成功都带有偶然性的说法。在中国,即使是一个农民,也不再宣扬真命天子一类的宿命学说。他们知道了只要有所行,就有可能会成功或者改变自己的命运。好的医学发现,或者说值得推广的发现,得经得起统计的验证。从这一点来讲,对于一个实验来说,意味着什么?需要更多的老鼠,病人,需要更准确的对问题的定义和设计,需要更精准的统计方法。正是基于对于统计过程的要求和追求,造就了SAS和一大批类似的软件的产生发展并存(有一种主席的百花齐放的意味,虽然在我们中国从来没有真正意义上的鸣放。但是在西方这一点,无论是政治上还是科学上,都做的比我们要好。咱们中国最相信阶层论。最典型的是城市对农村的歧视。有一点值得注意的是曾饱受歧视的农村孩子一旦入了市,就义无反顾地加入继续歧视父亲的大军。题外话)。从这一点来讲,SAS有其存在的合理性了。这是我的SAS存在论。

第三,SAS对于其他统计软件的优势。不谈劣处。

首先是SAS不仅仅是统计软件。因为我不懂所以我不谈。只局限于统计方面的好处。SAS是现在市面上至于人的能动性和被动性结合的比较好的软件之一。比较SPSS,SAS有更多的灵活性而不是规范;比较R,SAS提供的东西显得成熟稳固。斯坦福的TIBSHIRANI 是北美统计上的领军人物(其实‘领军’这样的词汇是我中国式思维和话语的产物。北美的科学霸权是比较柔和的。会议之前我看到Robert TIB一个人,手里端着咖啡,背后的背包塞了满满的东西,然后坐在一个长凳上整理讲稿。其实TB在统计上很有名。想一想BOOTSTRAP, GAM MODEL, DATA MINING, etc)。他讲LASSO理论。他说,他的LASSO算法的核心在R软件包里只是76行Fortran code。我听到旁边的一个听众嘀咕了一句,如果不理解他的理论的话,谁敢用他的程序?这差不多也放映出R的一个特点。譬如在文革贴大字报,据估计,清华在最高峰的三天之内大概贴出10万张大字报,可是从现在看,我们都很难读到一本关于大字报的系统整理和论述。人人都要贴,没有愿意阅读。人人都要有所建树,底层的东西却是甚少人有兴趣。所以在R里很难找到比拟于SAS里的proc means/summary那样的对基线连续变量的综合报告,在R里需要一系列的方程去综合,从使用的角度上说,不好。因此R的低端用户常常感到很沮丧:我要的是一盘菜填饱肚子,我不要自己操刀掌勺。在R我常有的疑惑的是,我的程序为什么没有错误?一切都是静悄悄的。当检查结果,或许会发现,结果的逻辑不对。不报告优化过程的优化结果总是令人将信将疑。我的设想的是,或者R更合适的角色应该灵敏度检验而不是常规的分析报告。对于SPSS我总是记住某个将讲师的一句话,Just Click Click Click(SPSS当然不止于此。我看到许多医学院的学生都用SPSS,但是聊聊感觉是他们常常不很清楚自己在做什么)。

第四,总而言之我要说,如果是统计为主业的,SAS只是工具。

SAS不存在了,还有ASS,ASS1, Big ASS, small ASS。。。(当然不可避免的是每一个都会有漏洞)。我们对SAS的依赖性其实并不很大。依赖性大的是SAS的雇员(true SAS programmer)。最他们来说,他们丢失的是一个谋生的平台(这是我新近舶来的新词汇),对于我们来说,只是,只是一把椅子吧。我们要做的是从这把椅子换到另外的一把(但愿不会是更好更舒适的沙发(平台)啊)。另外统计很难学。如果我说(其实是别人说的)即使是一流的科学杂志里的文章的统计方法有一半以上都存在着说不去的错误(低级),你或许会看出统计的重要性,以及由于缺乏常规训练而导致的统计人才的缺乏。从SAS看统计,只是数字而已。而统计本身,是一种理念。这种理念的培养是知识和应用的结合。也是对二者的调和。而数学嘛,是单调的前者,蹇涩而又艰辛。又扯远了。。。