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](https://en.wikipedia.org/wiki/Title21CFRPart11)),李还提到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教育的先行者,北大统计系的高惠璇老师已经退休,上面提到的张文彤,也离开了复旦,最近在淘宝网的数据门户看到一则消息1,说他已经转入上海一家市场研究公司。在北京,如果嫌自学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

hopewell2是国内最火的SAS中文论坛mysas.net的版主,最近几年在mysas.net上写代码是写得风生水起。之前我们简单沟通过,正好趁着这个聚会混个脸熟。

讲个小插曲。hopewell下午来的时候,手机刚好停电,我就在会场冲着感觉像他的面孔招手。后来hopewell同学通过组织会议的一位朋友找到我,自我介绍说是hopewell,我那朋友看着没反应,我差点叫出来,hopewell这个ID都不认识。唉,不是所有的SAS程序员都上mysas.net的。虽然SAS公司的laosunny在mysas.net发了本次活动的预告3,但感觉BBF跟mysas.net沟通不多。这次BBF大体上是一个通过工作邮箱召集的活动。

回到hopewell同学,一起海聊了。瞅个话档,我又厚颜无耻地问他对我公司感不感兴趣。碰到高手,我的第一个反应就是能不能邀请过来做同事,噫。


  1. 编者注:这个链接现在已经失效,抱歉。
  2. 编者注:这个链接现在已经失效,抱歉。
  3. 编者注:这个链接现在已经失效,抱歉。

发表/查看评论