冬日柔暖,岁月轻慢,到处充满圣诞节日气氛。12月24日周五下午1点,南京、青岛、北京、广州4地,汇聚9支参赛队伍,在程序部内部,全体员工举办了普瑞盛第五届SAS程序师大赛。
比赛开始前,普瑞盛副总经理郝永红作本次大赛的致词,郝总回顾了过往四届程序大赛的心路历程,其中第一届SAS程序师大赛更是可以追溯到2014年,这次大赛的成功举办也奠定了后面连续几届SAS大赛的大体框架及比赛流程规则,其中在18年举行的SAS程序圣诞贺卡大赛在团队内外都引起了强烈反响,也让其他岗位同事有机会了解SAS Programmer。
而本届SAS程序大赛的主题为提高SAS程序运行效率,因为随着III/IV期项目数量在公司内部占比越来越高,病人数及收集数据量也越来越大,程序的结果运行效率就显得特别重要。而普瑞盛从客户的角度出发,除了关注项目质量以外,项目的递交效率就放在最重要的位置。特别是对于项目锁库后,客户希望在最短时间内拿到topline结果,而普瑞盛能在极短时间内发出topline结果,跟内部团队持续流程优化,技术多年迭代深耕,重视技术人才的培养息息相关。
随后,程序部副总监郭绵绵现场宣读了本次大赛的比赛流程及比赛评分规则,并在现场随机生成各支参赛队伍的出场顺序,本次大赛正式拉开帷幕。
01
# SAS大赛 · 第一组 #
首先出场的第一组参赛队伍来自广州办,队员首先列举了本次大赛题目的原始数据有30多万条,数据集个数也较多,开始跑的过程因为数据太大,服务器报内存不足,导致出不来结果,后面通过不断改进,才终于解决了问题,最终程序用时4分40秒。
本组技术亮点:
使用了compress = Yes
数据集中去除无关变量
数据集及时去重等
02
# SAS大赛 · 第二组 #
被抽中的第二组参赛队伍为广州北京混合队伍,正当大家现场还沉浸在第一组的程序思路如何改进时,大屏幕上显示第二组作品已经在SAS上跑完了!!!本以为肯定是程序报错才导致提前结束,但当主持人点开结果时,Log却显示一切正常,且时间用时为5秒!!!OMG,现场顿时一阵沸腾,此时此刻,大家都迫不及待的想知道到底用了什么SAS技术实现。
本组技术亮点:
长度的定义用proc sql的modify
数据集的纵向合并用proc append步骤
数据集的横向连接用declare hash等
Ps.也许是现场观众最后对结果运行如此之快还是不敢相信,现场的提问一波接一波,异常激烈,但最后都被主讲人现场一一化解!点个赞。
03
# SAS大赛 · 第三组 #
第三组参赛队伍来自美丽的海滨城市青岛,通过前期程序的不断优化,成功闯入1分30秒大关。
本组技术亮点:
Data步骤中length过程会延长程序时间,建议采用outer union
计算均值推荐用proc means, 代替在data set步骤中计算或在proc sql等
本组程序运行用时:1分24秒
04
# SAS大赛 · 第四组 #
第四组参赛队伍同样来自青岛,由于在程序中同样使用了大量hash步骤,在用宏代替重复的处理过程,最终程序用时32.6秒。也是一个相当不错的成绩。
本组技术亮点:
Declare hash
兼顾效率同样要考虑程序的防御性等
05
# SAS大赛 · 第五组 #
第五组技术亮点:
Where语句代替if去做条件筛选
使用data _null_来处理不必生成数据的过程步
定义变量长度用alter modify…语句等
本组程序用时:45秒
06
# SAS大赛 · 第六组 #
第六组技术亮点:
分开处理local lab及central lab数据
导入数据前keep保留必要变量等
本组程序用时:1分12秒
07
# SAS大赛 · 第七组 #
第七组为广州青岛混合队伍,该队伍程序逻辑清晰,注释详尽,队员现场讲解流畅,一气呵成,重点突出,程序运行突破20秒大关更是再次惊艳了全场,将现场比赛气氛重新推向了高潮!
本组技术亮点:
首先导入大容量数据集前用keep保留必要变量
用hash代替常用的left join
尽量在一个data set步骤里面处理完所有过程步,减少多次用data set
尽量少使用proc sql
减少对数据排序proc sort过程步等
本组程序用时:15.2秒
08
# SAS大赛 · 第八组 #
第八组技术亮点:
能用keep的时候不用drop
只保留有用的中间数据集,及时清理内存空间
删掉没用的系统变量等
本组程序用时:27秒
09
# SAS大赛 · 第九组 #
最后一组来自南京办,通过把多个if then步骤改成proc format, 数据集之间的连接用union, 提前保留有用的变量的处理,多次梳理程序前后逻辑等,同样成功闯进30秒大关,最终定格程序运行用时为29.3秒。
经过近3个半小时的现场作品展示,及观众对各小组作品犀利的提问、点评后,现场各个评委综合程序的运行效率,程序可利用度,代码防御性,美观排版及现场讲解发挥等各个方面进行了专业的综合评定打分,最后决出前三名!
比赛临近结束,终于来到了激动人心的时刻,在全部门的期待下,郝总逐一揭晓公布了本次大赛的获奖人员名单,随着名单揭晓,比赛现场不时传来震耳欲聋的掌声及欢呼声,虽然因为疫情大家不能齐聚现场,但是各个办事处通过远程的方式,仍然感受到比赛激烈而欢快的气氛。同时,在此也恭喜本次获奖的各个同事!
比赛尾声,无论是刚入职不满一年新人还是老员工,都表示通过本次比赛学到了很多,在SAS技术上也得到了明显提高,特别是SAS运行效率这块儿,大家以后都会有意识的在代码上有所加强。同时,部分同事对自己技术的不足也有了改进的方向,并期待下一届SAS大赛能够继续崭露头角,争取挤进前3。
最后,再次祝贺普瑞盛程序部第五届SAS程序大赛取得圆满成功,也祝长期关注普瑞盛的业内同行圣诞节快乐。希望无论是在SAS岗位,还是在其他医药行业岗位,都能够兢兢业业,脚踏实地,深耕专研核心技术,为中国新药临床研发事业贡献自己微薄力量!