加入/合并两个表,删除新的重复项 [SAS 中的 PROC SQL]

Join / Merge two tables removing new duplicates [PROC SQL in SAS]

论坛上有人问过类似的问题,但我的问题似乎很独特。我不确定这是因为我没有唯一 ID 还是因为我的 KEY 是我的实际数据。希望大家帮帮忙

我正在尝试合并两个具有相同列结构的 table(旧的和新的)。

我想保留旧 table 中的所有值,并仅将新 Table 中的新变量附加到组合 Table 中。 table 中存在的任何键都应采用旧 table.

的值
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;

这可能对您有所帮助。

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]

只要 table:

中的键没有重复值
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

如果第一个值不缺失,则合并 returns 第一个值,否则 returns 第二个值。

如果您在 table 中没有重复的键,那么数据步骤中的简单 update 语句就可以完成这项工作。您只需要确保 NEW_TABLE 是列表中的第一个,因此 OLD_TABLE 中的值将替换键匹配的值。一个 table 独有的任何键都将自动输出。

您的数据需要按 Key 排序,如您的示例所示。

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;

订购数据集

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

用by组合成一个数据集,如果匹配则只输出第一个key

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