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过程易于下手。

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容