9 月 4 号下午,周六,去北大医学部参加了北京数据管理与生物统计论坛(Beijing Biometrics Forum, BBF)的第三次聚会,这次活动由 SAS China 和北京大学临床研究所赞助。这里写些会议见闻和一些零散的感想,不算是会议的正式 “纪要”。东西贴这,大致想给 “统计之都”(COS) 的朋友交流下北京 SAS 技术社区的氛围、工作市场情况以及一些相关技术评论等等。
1. 话题
西安杨森的薛富波博士做的开幕致辞,他也是 BBF 的召集人。SAS China 的市场部总监罗威先生代表 SAS 公司做了欢迎致辞。下面是六位主题发言人的演讲简介以及我的一些杂感。
1.1 SAS 程序编写规范 (Good SAS Programming Development Practices)
演讲者是赛诺菲 - 安万特的李友先生,也是本次活动的主持人。除了行业监管规范(如_21 CFR Part 11_),李还提到 SAS 的代码规范,如花盒子注释(程序头)、代码结构、缩进、命名规则、可重用性和效率等等议题。这些问题,各个公司各个程序员可能都有不同的风格不同的偏好,但李给的这个较为全面的梳理,还是非常有启发意义的。
对传统程序员(C/C++、Java、Perl、……)来说,代码风格、质量以及重构都是很好理解的事情,但这些却是大量 SAS 程序员需要补的课。SAS 程序员背景多样,主要以统计、数学、生物、医学为主,大多缺少这方面的训练,认为写出的代码能够完成工作就万事大吉。这里除了对 SAS 运行机制的理解层次不一样,还有一个代码品味的问题。如果把整页整页的代码看成一篇散文,从观感上,相信每个人都能判断出,哪些代码至少 “看上去” 像是非常好代码。
李提到他幻灯片里介绍 SAS 软件的部分,参考了 “统计之都” 的博文——原来也有同行在看这里的文字。国内 SAS 程序员散布四处,有些在 COS 潜水,有些在 mysas.net 灌水,有些喜欢类似 BBF 的线下交流,浮出水面,可能大伙看着都脸熟。
关于代码规范。还有一个比较少见但却是非常有意思的可能,那就是,“非不能也,实不为也。” 怎么说?咱不是水平不行,也不是品味极差,但为了保住饭碗,俺就是要把代码写得极怪,以使后人无法接手维护,从而保证了自己的不可替代性。这种人被称作 Job Security Specialist。有点可笑了,呆伯特有一句说得好,笑笑:
Don’t be irreplaceable, if you can’t be replaced, you can’t be promoted.
1.2 PROC SQL 在临床试验中的应用(PROC SQL Applied in Biometrics)
演讲者是 RPS 的吴崇胜先生,介绍的是 PROC SQL 在临床数据分析中的应用,包括数据校验、数据汇总等,强调了 PROC SQL 跟 data steps(数据步)相比对列进行处理的优势。
一个 SAS 程序员的工具箱分为两类,一是传统 SAS 的 data steps,二就是 SQL。——说到这里,我要先提一下 “SAS 程序员” 和“SAS 使用者”的区别:
- SAS 程序员在文本编辑器里写代码,里面主要是 data steps 和 SQL,穿插以 Macro(宏)和其他 procs(程序步)等等,总之,一个 “SAS 程序员” 几乎就是一个“SAS/BASE 程序员”。
- 而 “SAS 使用者”,他们或者单纯使用 SAS 的客户端工具,如 Enterprise Guider、Analyst、SAS Add-In for Microsoft Office,或者也写主要以 procs 为主的代码(显然,有的 SAS 使用者会成长为 SAS 程序员,有的 SAS 程序员也会转化成 SAS 使用者)。
SAS 的 PROC SQL 是标准 SQL(SQL-92)的一个实现,你可以把在其他任何场合学到的大部分 SQL 知识不加修改地移植到 PROC SQL 里面来。这也能提供一部分的解释,为什么以前是统计系学生专场的 SAS 程序员群体,有越来越多的 IT 背景的人员加入。
data steps 跟 SQL 是左青龙右白虎,混合使用,扬长避短,才能相得益彰。SAS data steps 脱胎于 PL/1,是一门过程式的语言,而 SQL 呢?它的全称是 Structured Query Language(结构式查询语言),但其实,SQL 既不是结构式的,也不仅仅是用来查询的,最后,从图灵完全的角度,它也不能算作一门 “语言”(比如,标准 SQL 就做不了循环)。
1.3 PROC FCMP 介绍
演讲者是我的前同事,SAS R&D 的覃龙先生。有了 PROC FCMP,你就可以像其他语言一样,定义自己的函数了,而不是只用 SAS Macro 定义一个 “类似函数的” 宏。覃的报告分为两部分,一是用 PROC FCMP 的数据功能(array),实现类似 SAS/IML 的矩阵运算,二就是用 PROC FCMP 自定义函数了。
PROC FCMP 是 SAS 9.2 版本的一个亮点,其实在 9.1.3 也有它一个实验版本,可以拿来练练手。又,覃提到 SAS Macro 不能做递归,其实它是可以的,也不是很麻烦(当然不如在 PROC FCMP 里写着顺畅)。
1.4 让 SAS 作图变得更容易:%GraphLineplt (%GraphLineplt: Made Graph Easy)
演讲者是赛诺菲 - 安万特的李华丹先生。%GraphLineplt 是李开发的一套多功能的作图程序,整个发言就是讲解这套宏的构架与使用。我对作图没有特别的研究,对着文档照葫芦画瓢而已。主要印象,一是作图元素的分解,二是用 data steps 辅助(annotate 功能)。听这个演讲,至少知道,以后有问题,可以直接找谁请教了。
1.5 一些 SAS 小技巧 (Tricks Make Life Easy)
演讲者是诺和诺德的于文博先生,去年在 CDISC Interchange 2009 的培训会场见过。于介绍了 SAS 的两个实用小技巧,一是 Add Abbreviation,二是 Record Keyboard Macros。当然,他发言的精华不在这里。展示完这些小技巧后,于说道:
all tricks are in the dust. 所有技巧都是过眼云烟。
接着于就展示了质量控制专家戴明著名的 “戴明环”(Deming Cycle),一个计划、执行、检查、处理的闭环。虽然衔接得有些无厘头,于还是有效地把会场的气氛大大提升了一把。戴明环对项目管理很有启发意义。
1.6 医药行业 SAS 程序员职业发展探讨 (Career path of SAS programmer in pharmaceutical industry)
演讲者是 Covance 的邓亚中先生。邓这次演讲带了很多干货:
- SAS 程序员在医药行业的分工
- SAS 程序员的职业转向(技术专家、咨询顾问、管理、培训等等)
- 国内药厂和 CRO 统计师和 SAS 程序员的数量和分布(有图有真相,整整两页胶片,大伙看着都是非常感兴趣)
关于 SAS 程序员,现在国际上的大药厂以及 CRO 纷纷在中国设点,邓说,就今年国内还有 100 个缺口(邓在发言中也顺便给他们公司招聘做做话题广告):这 100 个人,往哪里找啊?国内高校,SAS 教育的状况不容乐观。李友后来插一句,就仰仗各位帮扶带了。
2. 人物
2.1 薛富波 (Bruce Xue)
第一感觉就是,比我印象中年轻多了(Bruce,在我印象中,你也不 “老”,只是……)。我 06 年开始学习 SAS(版本 9.13),跟那时很多初学者一样,手头也都摆了 Bruce 的《SAS 宏语言基础》以及他与上海张文彤等人合著的《SAS 8.2 统计应用教程 》(2004)。当时他还在西安,第四军医大。怎么说?印象中 Bruce 有我老师般的年龄,见面却是我经理的年龄,——俗语一句,闻名不如见面,见面更胜闻名呀。
提到国内 SAS 教育的先行者,北大统计系的高惠璇老师已经退休,上面提到的张文彤,也离开了复旦,最近在淘宝网的数据门户看到一则消息 ^[编者注:这个链接现在已经失效,抱歉。],说他已经转入上海一家市场研究公司。在北京,如果嫌自学 SAS 不好玩,可以去高校找找现在还活跃的老师:
- 军事医学科学院的胡良平教授,这个秋季学期在中科院研究生院开 SAS 课;
- 按照朱世武教授的一贯安排,这个秋季学期他也会在清华大学经管学院开两三门 SAS 与金融计算的课程,本科高年级和研究生两种水平类别;
- 北大统计系李东风教授这个秋季学期会开一门 “临床试验 SAS 高级编程”(SAS Programming in Clinical Trials) 的选修课,针对大四毕业生。同时,这个秋季学期,北大统计系还开有一门 “临床试验设计与分析”(Clinical trial design and analysis)。个人感觉,这是北大统计系对最近几年国内生物统计市场蓬勃发展的一个反应。真很可贵的尝试。
另外,按照人大统计系的某些实用主义传统,这个秋季学期或者明年春季学期,也会开设相应的 SAS 的课程。大学乃社会公器,认为未注册的人来蹭课会 “扰乱教学秩序” 只是大学的 “教务部观点”,而非大学的“教授观点”。讲讲北大的氛围,假设,80 人的教室刚好容纳 80 位注册学生,然后一共有 100 人来听课,你就不知道坐在位子上的 80 位、后排站着的 10 位、还有前排地板坐着的 10 位谁是注册生谁是旁听生。老师继续上课,相安无事。然后,教室再挤来 20 位蹭课的。课堂终于混乱了,教授说:“我们再换一个大点的教室吧。” 上次回学校,图书馆迎新生,拉了一个条幅,上书“得天下英才而教之,遍读经典以传承”,居然感动地一塌糊涂。
2.2 tangyh
tangyh 是 “统计之都”(COS)SAS 版的版主,现在中科院读研,数据挖掘方向,刚在赛诺菲巴斯德生物统计部结束暑期实习,是解决问题能力很强的 SAS 好手,会上也有猎头过来问候。想,等两三年后,如果 tangyh 对工业界感兴趣,我要第一个给他打电话。
2.3 hopewell
hopewell^[编者注:这个链接现在已经失效,抱歉。] 是国内最火的 SAS 中文论坛 mysas.net 的版主,最近几年在 mysas.net 上写代码是写得风生水起。之前我们简单沟通过,正好趁着这个聚会混个脸熟。
讲个小插曲。hopewell 下午来的时候,手机刚好停电,我就在会场冲着感觉像他的面孔招手。后来 hopewell 同学通过组织会议的一位朋友找到我,自我介绍说是 hopewell,我那朋友看着没反应,我差点叫出来,hopewell 这个 ID 都不认识。唉,不是所有的 SAS 程序员都上 mysas.net 的。虽然 SAS 公司的 laosunny 在 mysas.net 发了本次活动的预告 ^[编者注:这个链接现在已经失效,抱歉。],但感觉 BBF 跟 mysas.net 沟通不多。这次 BBF 大体上是一个通过工作邮箱召集的活动。
回到 hopewell 同学,一起海聊了。瞅个话档,我又厚颜无耻地问他对我公司感不感兴趣。碰到高手,我的第一个反应就是能不能邀请过来做同事,噫。
发表 / 查看评论