立即注册 登录
公卫人 返回首页

asteriod的个人空间 https://www.epiman.cn/?12177 [收藏] [复制] [RSS]

日志

EXCEL“条件格式”在SAS中的实现及其应用

热度 105已有 1148 次阅读2010-8-17 13:52 |个人分类:sas|

   最近有一个数据逻辑审核的工作,要从大量的数据中筛选出不符合要求(逻辑或业务规则)的数据,有点数据质疑的味道。( 相信大家在搞调查的时候,数据清理环节经常要遇到。)筛选出的结果要标示出来,用不同颜色标示不同的异常类型。按通常的思路,这种工作无非两个办法:(1)手工看,并在excel里标示颜色来区分;(2)使用excel的条件格式。但方法(1)容易出错,“漏检”率比较高,且数据量相当大,“看是看不过来的”;方法(2)倒是可以考虑,但仔细研究后,excel的条件格式只支持三个条件(2003版本,07版本多些)。另外,用excel有诸多不便,一是数据量超过了其行数限制,二是条件格式的运算速度问题,三是结果的输出问题(筛选出来的数据还是要手工拷贝)、四是对于一些复杂的条件,还需要使用vba来实现,无法在窗体上设置。综合考虑数据量、运算速度、方便程度后,我还是选择SAS作为工具来进行。
    这个程序大致思路如下:
    (1)读取待审核数据文件;
    (2)将逻辑规则做成数据表,按照逻辑规则筛选异常数据;
    (3)给违反逻辑规则的异常数据标上颜色。
     (4)分层(如分省、分县)输出异常数据为EXCEL。
    (1)和(2)没什么难度,现在来谈谈(3)和(4)的实现。使用proc report过程,在输出数据集的所有变量后,写一个计算变量,如变量名为ComFormat;定义该变量为不显示:define ComFormat/noprint; 这个变量的定义计算部分内写如条件:
If 条件1 then do;
call define("var1", "style", "style=[background=red]");
这句的意思是,但条件1成立的时候,把var1单元格的背景色改为红色。
当然你也不设置背景色,可以设置字体颜色,边框,底纹等等。具体代码可以去查style的帮助文档。这里最大的优点是,可以设置多个条件,你可以写n个条件,也就是一个if接着另一个if,并且if语句还可以嵌套,多复杂的条件都可以实现。
     (4)批量输出,我的数据是分层的,要求按层变量输出,如果层数多(如要按100个或1000个层输出数据)的话,也比较麻烦,我用的办法是写了一个macro,用循环来调用这个macro实现,自动批量的输出。
 
     小结:(1)SAS可以实现类似EXCEL效果的条件格式,且条件可以非常复杂;
         (2)此方法可以应用于临床研究的数据质疑,数据审核等工作;不同的颜色用于区分不同的逻辑异常类型。
        (3)数据输出方便,具有一些其他软件无法比拟的优点。
 
 
 
   

路过

鸡蛋

鲜花
6

握手

雷人

刚表态过的朋友 (6 人)

发表评论 评论 (1 个评论)

回复 WWY2009 2010-8-18 22:38
高手!不过我觉得EXCELL通俗易懂,且很好学。EXCELL和sas各有所长吧。

facelist

您需要登录后才可以评论 登录 | 立即注册

手机版|会员|至尊|接种|公卫人 ( 沪ICP备06060850号-3 )

GMT+8, 2024-5-15 06:12 , Processed in 0.033435 second(s), 8 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

返回顶部