美文网首页
SAS编程:分享数据集Compare的小经验

SAS编程:分享数据集Compare的小经验

作者: 野藤_ | 来源:发表于2022-03-19 12:32 被阅读0次

    不管是SDTM、ADaM,还是TFL,最后的比对都是通过数据集的比较来实现的。这个比较的过程不同的公司可能有不同的称呼,有的叫Validation,有的叫QualityControl。

    比对的主体内容是,是数据集的比对,这个实现这个功能的过程步是Compare。不同的公司可能有各自的比较的宏程序,但是程序的核心还是Compare过程步。

    我常用的Compare语句如下:

    proc compare base = base comp = comp out=df outbase outcomp outdif outnoequal;
    run;
    

    下面详细介绍一下代码实现的功能。

    1. Compare输出要求

    个人编程的习惯是,自己先用简单的Compare过程步进行比较,完全对上之后,再运行公司的比较宏程序。之所以这样做,主要有两个原因,第一,公司宏输出内容内容臃肿,没自己写的Compare语句简洁;第二,在臃肿的宏程序中,没有找到输出自己想要的比对结果的选项

    我想要的输出比较结果实现以下几点:

    1. 比较结果输出到数据集中;
    2. 结果数据集中,要包含Base和Compare数据集的记录;
    3. 结果数据集中,未对上的记录要有标记。
    4. 结果数据集中,只输出对不上的记录,不输出对上的记录;

    2. SAS默认输出结果

    大家应该都有体会,SAS自动输出的Compare过程步结果,只成对输出未比对上的结果;同时输出的变量长度只有20,超出20的部分无法展示。这对于QC是很不方便的,我用代码给大家展示一下默认的输出结果:

    data base;
      a = repeat("1234567890",3); b = "AA";  c=1; output;
      a = "Haha"; b = "BB"; c=11; output;
      a = "Heihei"; b = "CC"; c=233; output;
    run;
    
    data comp;
      a = repeat("1234567890",2); b = "AA"; c=1; output;
      a = "Haha"; b = "BB"; c=22; output;
      a = "Heihei"; b = "CC"; c=233; output;
    run;
    
    proc compare base = base comp = comp;
    run;
    
    数据集展示 默认输出结果

    从结果上看,没对上的字符变量,会输出前20位字符,如果长度超过20部分没有对上,就无法直观地查看,这时候需要手动把对应的记录中变量的具体值找出来,复制粘贴到编辑器中进行查看比较;没对上的数值变量会输出不同数值的差值。

    3. 实现想要的输出要求

    想要实现前面提到的4个输出结果要求,需要使用5个对应Compare过程步选项:

    1. OUT = SAS-data-set
    2. OUTBASE
    3. OUTCOMP
    4. OUTDIF
    5. OUTNOEQUAL
    3.1 选项OUT = SAS-data-setOUTBASEOUTCOMP

    OUT = SAS-data-set选项输出Compare过程步的结果到数据集中;OUTBASE选项使得在结果数据集中,输出Base数据集的记录;OUTCOMP选项使得在结果数据集中,输出Compare数据集的记录。

    我们可以先看一下这3个选项的输出结果:

    proc compare base = base comp = comp out=df outbase outcomp;
    run;
    
    输出数据集DF

    这3个选项将Base和Compare数据集中的记录,全都输出到结果数据集中。同时,两个数据集中相同行数的记录是上下排列的,这样可以直观地进行查看。

    3.2 选项OUTDIF

    选项OUTDIF会将比较结果显示出来,对于字符变量,对上部分会显示.,未对上部分会显示X;对于数值变量,对上部分会显示0E,未对上部分会显示数值的差值。

    proc compare base = base comp = comp out=df outbase outcomp outdif;
    run;
    
    输出结果数据集

    对于未对上字符变量,X看起来比较醒目,方便进行比较。

    3.3 选项OUTNOEQUAL

    从上面输出结果可以看到,第3条记录,是完全对上的,展示出来显得多余。选项OUTNOEQUAL可以不输出对上的记录,更方便聚焦没有对上的记录。

    proc compare base = base comp = comp out=df outbase outcomp outdif outnoequal;
    run;
    
    输出结果数据集

    以上,就是我QC过程中,常用Compare选项展示。

    4. 大观测数数据集的比对

    以上Compare过程步的输出结果,在小数据量的比较中是比较方便QC操作的。但是对于大数据量的比较,比如SDTM.LB,成千上万条数据,即便像上面那样输出,也是不容易一下子上手QC的。这时候,聚焦到未对上的一小部分记录,QC过程就简单多了。

    %macro con;
      where usubjid = "XXXXX";
      keep usubjid lbtest: lborres lbstres:;
    %mend;
    
    data base;
      set sdtm.lb;
      %con;
    run;
    
    data comp;
      set lb;
      %con;
    run;
    
    proc compare base = base comp = comp out=df outbase outcomp outdif outnoequal;
    run;
    
    

    以上程序,把比对的数据集进行筛选,聚焦小部分的记录和变量,进行QC,逐个逐个解决问题。

    程序中,筛选条件放到宏程序里,这样每次只要修改宏程序中的条件,就可以完成Base和Compare数据集记录的筛选,简化操作。

    总结

    这篇文章介绍了,Compare过程步的实用选项,方便数据集QC的处理。对于大数据量的比对,未对上时,可以选择筛选数据、缩小比对范围,使得QC过程易于下手。

    感谢阅读!若有疑问,欢迎评论区交流!

    相关文章

      网友评论

          本文标题:SAS编程:分享数据集Compare的小经验

          本文链接:https://www.haomeiwen.com/subject/zmqwdrtx.html