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

不管是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的小经验)