【问题标题】:Match Merge SAS Data Set Differences匹配合并 SAS 数据集差异
【发布时间】:2019-03-31 08:50:32
【问题描述】:

我有一个关于 SAS 的问题。您通常如何确定两个数据集的差异?下面是我使用的代码。这就是我用来确定记录是否在一个数据集中但不在另一个数据集中的方法。例如,如果运行代码的人获得更高或更低的记录数。我正在寻找任何替代方案。谢谢。

 PROC SORT DATA=IVT.REQ_1_3_17  OUT=lob.REQ_1_3_17i;
     BY ACCT_NB DAY_TIME_DIM_NB TXN_AM  TXN_POSTING_SEQ CS_TXN_CD REQ_1_3_EXCL;
 RUN;

PROC SORT DATA=lob.REQ_1_3_17  OUT=lob.REQ_1_3_17l;
  BY ACCT_NB DAY_TIME_DIM_NB TXN_AM TXN_POSTING_SEQ CS_TXN_CD REQ_1_3_EXCL;
RUN;

DATA lob.MISMATCHES_1;
MERGE lob.REQ_1_3_17i(IN =A) lob.REQ_1_3_17l(IN=B);
BY ACCT_NB  DAY_TIME_DIM_NB TXN_AM TXN_POSTING_SEQ  CS_TXN_CD REQ_1_3_EXCL;
IF A AND NOT B;
RUN; 

【问题讨论】:

标签: sas dataset


【解决方案1】:

有很多方法可以找到两个数据集中的差异。一个标准是 PROC COMPARE,它有一个 OUT 选项来保存数据集中的所有差异。您可以使用特殊选项仅输出不同的值:

proc compare    
    base=lob.REQ_1_3_17i
    comp=lob.REQ_1_3_17l
    out=differences
    outDif outBase outComp outNoEqual
    ;
run;

该过程会自动生成一个宏变量,称为 SYSINFO。有了它,您无需查看 OUT 数据集即可了解一般类型的差异。有关详细信息,请参阅SAS help

差异数据集中,您可以找到有关比较的详细信息。 “_TYPE_”变量显示了不同的类型。当其值为 DIF 时,存在值的差异。如果数值变量不同,它只会包含两个值之间的差异。如果字符变量不同,你会得到类似“.X..X...”的东西,这意味着两个值在第二个和第五个字符上是不同的。

好吧,这一切听起来都不错,除非您的数据有不同数量的记录或不同的 ID 变量。为此,您应该使用 ID 语句,以便在比较之前对值进行分组。

proc compare    
   .....;
   id acct_nb;
run;

在现实生活中,我并不经常使用 proc 比较,除非它是最终比较。我通常不需要知道那个级别的细节,只需要选择一些具有不同值的 ID 变量。合并语句是解决它的一种方法,但我更喜欢使用 SQL。想法是合并两个数据集,然后使用 catx 为每个记录创建一个唯一的“ID”变量,然后在每个数据集中搜索它。

proc SQL;
    create table differences as
    select distinct idVar1, idVar2, idVar3
    from data1 natural full join data2
    where 
    catx('@',idVar1, idVar2, ...., var1, var2, ...)
        not in (select catx('@',idVar1, idVar2, ...., var1, var2, ...) from data1)
    or
    catx('@',idVar1, idVar2, ...., var1, var2, ...)
        not in (select catx('@',idVar1, idVar2, ...., var1, var2, ...) from data2)
    ;
quit;

注意:此方法不会捕获完全重复,因此如果您的数据可以包含它们并且了解它们很重要,请使用其他方法。您还需要记住,最大字符串值为 32767,如果您的变量之一只能包含该字符,则将 '@' 替换为其他内容(例如,'$@`')。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 2017-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    • 2021-06-03
    相关资源
    最近更新 更多