SAS:比较两个数据集,但需要从一个集合中删除额外的观察结果

时间:2015-07-10 00:52:25

标签: sas

我在如何比较SAS中的两个数据集方面遇到了麻烦,但是一个数据集可能有额外的观察结果。我想摆脱这些额外的观察,只是比较两个数据集的其余部分。让我举个例子:

数据集1

ID    Value1  Value2
105   1       A   
105   2       B
105   3       C
*105   4       D
106   10      E
106   20      F
106   30      G
107   50      H
107   60      I

数据集2

ID    Value1  Value2
105   1       A   
105   2       B
105   3       C
106   10      E
106   20      F
106   30      G
107   50      H
107   60      I

两个数据集都是相同的,除了ID = 105的观察值,Value1 = 4(为方便起见用星号标记)在数据集1中,但在数据集2中没有。

我需要将这些数据集与我的第一个数据集中的这些类型的观察结果进行比较,并检查这些观察结果是否与ID和Value1相等。是的,对于某些观察,重复ID值。它们不是重复的,因为它们具有与之关联的不同“Value1”值。

有一种简单的方法吗?

2 个答案:

答案 0 :(得分:2)

data a1;
input ID value1 value2$;
datalines;
105   1       A   
105   2       B
105   3       C
105   4       D
106   10      E
106   20      F
106   30      G
107   50      H
107   60      I
run;


data b1;
input ID value1 value2$;
datalines;
105   1       A   
105   2       B
105   3       C
106   10      E
106   20      F
106   30      G
107   50      H
107   60      I
run;


data a2(rename=(value1=value1_a value2=value2_a));
set a1;
newID=compress(ID||value1);
run;

data b2(rename= ( value1=value1_b value2=value2_b));
set b1;
newID=compress(ID||value1);
run;

proc sort data=a2;
by newID;
run;
proc sort data=b2;
by newid;
run;


data c1;
merge a2(in=a) b2(in=b);
by newID;
from_a=a;
from_b=b;
run;



/**check out unmatched data records**/
data unmatched;;
set c1;
where from_a^=1 or from_b^=1;
run;

proc print data=unmatched;
run;

结果:

enter image description here

以下是匹配的记录:

data matched;;
set c1;
where from_a=1 and from_b=1;
run;

proc print data=matched;
run;

结果:

enter image description here

答案 1 :(得分:2)

PROC COMPAREBYID

一起使用
proc sort data=data1;
by id value1 value2;
run;

proc sort data=data2;
by id value1 value2;
run;

proc compare base=data1 compare=data;
id id value1;
run;

这是在使用ID变量比较数据集时记录的: http://support.sas.com/documentation/cdl/en/proc/65145/HTML/default/viewer.htm#n14cxqy1h9hof4n1cq4xmhv2atgs.htm