2015-12-08 116 views
0

類似的問題已經在論壇上提出,但我似乎有一個獨特的問題與我的。我不確定這是因爲我沒有唯一的ID還是因爲我的KEY是我的實際數據。我希望你們能幫忙。加入/合併兩個表格刪除新的重複[PROC SAS in SAS]

我試圖合併兩個表(新舊)具有相同的列結構。

我要保留我的舊錶中的所有值和新表只新變量追加到合併表。兩個表中存在的任何鍵都應具有舊錶的值。

OLD TABLE 
Key | Points 
AAA | 1 
BBB | 2 
CCC | 3 

NEW TABLE 
Key | Points 
AAA | 2 
BBB | 5 
CCC | 8 
DDD | 6 

Combined TABLE 
Key | Points 
AAA | 1 
BBB | 2 
CCC | 3 
DDD | 6 

我覺得我想要實現的是維恩圖相當於這個:

Venn diagram

...但無論出於何種原因,我沒有得到這個代碼的預期效果:

CREATE TABLE Combined 
SELECT * FROM Old as A 
FULL OUTER JOIN New as B ON A.Key=B.Key 
WHERE A.Key IS NULL OR B.Key IS NULL; 
+0

之前問及SO –

+0

我正在尋找所以在弄清楚這一點,似乎無法達成有效的解決方案? – Wolfspirit

+1

'SELECT ISNULL(old.Key,new.Key)鍵,ISNULL(old.Points,new.Points)指出,與老FULL OUTER JOIN新開old.Key = new.Key' – Eric

回答

0

訂單數據集

proc sort data=old; 
    by key; 
run; 
proc sort data=new; 
    by key; 
run; 

與數據集由,只輸出第一鍵組合的他們,如果有匹配

data combined; 
set 
    old 
    new; 
by key; 
if first.key then output; 
run; 
+0

我最終只使用了SAS而不是PROC SQL。你的實現比我的更復雜!謝謝。 – Wolfspirit

+0

沒問題:)請注意,即使這些代碼僅在新表中,此代碼也會刪除所有重複的鍵值。組合表將只存儲所述密鑰的第一次出現。 – RamB

0

這可能對你有幫助。

SELECT B.[Key], MIN(CASE WHEN A.[Key] = B.[Key] THEN A.Points ELSE B.Points END) AS 'Points' FROM OldTable A CROSS APPLY NewTable B GROUP BY B.[Key]

+0

爲什麼Min(參數)? – Wolfspirit

+0

值得一提的是,我在SAS中使用了Proc SQL函數,它不能識別交叉應用功能 – Wolfspirit

+0

要確保要顯示的點是每個鍵使用的第一個點。那是你想要達到的目標嗎? –

0

只要有是在兩個表中鍵的重複值:

SELECT COALESCE(a.key,b.key) AS key, COALESCE(a.points,b.points) AS points 
    FROM old a FULL OUTER JOIN new b ON a.key EQ b.key 

凝聚返回如果第一個值不缺少第一個值,否則返回第二個值。

+0

不幸的是,有重複的鍵,我們希望保留舊版本的值。 – Wolfspirit

+0

或者您是否意味着每個表格中的重複? – Wolfspirit

+0

我的意思是源表中的重複項。只要給定表中的所有關鍵值都是唯一的,並且點永遠不爲空/缺少,上述工作就可以實現。 – Ludwig61

0

如果沒有任何一個表中有重複鍵,然後在數據步驟簡單update聲明將做的工作。您只需確保NEW_TABLE是列表中的第一個,因此OLD_TABLE中的值將替換密鑰匹配的值。任何一張表的唯一鍵將自動輸出。

你的數據需要通過按鍵進行排序,如在你的榜樣。

data OLD_TABLE; 
input Key $ Points; 
datalines; 
AAA 1 
BBB 2 
CCC 3 
; 
run; 

data NEW_TABLE; 
input Key $ Points; 
datalines; 
AAA 2 
BBB 5 
CCC 8 
DDD 6 
; 
run; 

data want; 
update new_table old_table; 
by key; 
run; 
+0

輝煌!這是我學到的新東西:) – Wolfspirit