2015-04-30 142 views
0

我有兩個SAS數據集比較兩個SAS數據集

的回答數據集

id A1 A2 A3 A4 
1 A B C D 
2 B B C A 
3 A A D D 

和一鍵數據集

A1 A2 A3 A4 
A B C D 

的問題是,如果在SAS的方式來循環槽第一個數據集中的觀察值並將它們與第二個數據集中的唯一觀測值進行比較。我對SAS很新,所以任何事情都會有所幫助。

回答

2

循環由數據步驟處理 - 它會自動完成。

爲了得到一個單行附加到其他數據集的所有行很簡單:

data want; 
    if _n_=1 then set have_onerow; 
    set have; 
run; 

,只有當變量名稱不同,但工作 - 但會從have_onerow該行追加到的所有行有(因爲SET的變量會自動保留)。

這不會爲你做比較 - 你必須這樣做。

但是,有一種方法可以使用它來生成proc compare數據集。只保留ID並執行上述操作:然後每個ID重複一次密鑰。然後proc compare會爲你做這個 - 看the documentation獲得更多的信息,哪些選項給你輸出數據集的正確信息。

data have; 
input id A1 $ A2 $ A3 $ A4 $ ; 
datalines; 
1 A B C D 
2 B B C A 
3 A A D D 
;;;; 
run; 

data key; 
input a1 $ a2 $ a3 $ a4 $; 
datalines; 
A B C D 
;;;; 
run; 

data key_allrows; 
    if _n_=1 then set key; 
    set have (keep=id); 
run; 

proc compare base=key_allrows compare=have out=compare; 
    by id; 
run; 
+0

謝謝!但是,我可以使用這種比較的結果來形成一個新的數據集嗎?例如:如果id不等式的數量超過2,則將該觀察值置入數據集「失敗」 – Creon12

+0

是的。看看文檔;它涵蓋了很多不同的選項。上面應該產生第三個'比較'數據集,如果它們是相同的或'X .......',如果它們不是(因爲它們是8性格就像我懶洋洋地輸入它們一樣)。你有很多選項可以控制這個。如果你有一些特定於proc比較的東西,一旦你嘗試過,如果它與這個問題有很大的不同,那麼你可以隨意問另一個問題! – Joe

+0

謝謝你的幫助! – Creon12

1
proc sort data=a; by a1 a2 a3 a4; run; 
proc sort data=b; by a1 a2 a3 a4; run; 

data c; 
    merge a(in=ina) b(in=inb) 
    by a1 a2 a3 a4; 
    if inb then b='Ý'; 
run; 

它創建數據集與指標B = 'Y' 爲匹配一個