2015-07-10 44 views
2

我在如何比較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,值1 = 4(爲了視覺方便,用星號標記)在數據集1中,但不在數據集2中。

我需要比較兩種數據集與從我的第一個數據集中去掉的這些類型的觀測值,並檢查這些觀測值是否與ID和Value1相同。是的,ID值重複一些觀察。它們不是重複的,因爲它們與它們有不同的「Value1」值。

有沒有簡單的方法來做到這一點?

+0

如何PROC比較? –

回答

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

+0

還有很多其他的方法可以做到這一點,你也可以使用SQL來選擇不匹配的數據記錄。 – 2015-07-10 01:41:52

相關問題