我有两个表:
表1:
关键 p1 呼叫
1A1 ABC 5
2A2 DEF 4
3A3 GHI 3
3A3 JKL 3
4A4 MNO 2
4A4 PQR 2
4A4 STU 2
表2:
Key p2 calls
1A1 DEF 5
3A3 JKL 3
4A4 PQR 2
4A4 STU 2
我的输出表应该是:
key p1 calls p2
1A1 ABC 5 DEF
2A2 DEF 4 .
3A3 GHI 3 JKL
3A3 JKL 3 .
4A4 MNO 2 PQR
4A4 PQR 2 STU
即,表 2 中的记录应与表 1 中的第一个匹配项合并,并且没有其他记录。一旦表 2 中的"3A3 JKL 3"与表 1 中的"3A3 GHI 3"合并,该记录应该从表 2 中删除。
注意:点(.)表示缺少的值。
有人可以建议一种使用 sql 或 sas 的方法吗?
提前致谢
这是 SAS 完成我认为您要问的事情的方法。 基本上,这是一个简单的合并,经过调整,使P2设置为缺少,而表1中的KEY不是该特定值的第一次出现。 如果您的数据未排序,则需要先执行此操作。
data table1;
input key $ p1 $ calls;
datalines;
1A1 ABC 5
2A2 DEF 4
3A3 GHI 3
3A3 JKL 3
;
run;
data table2;
input key $ p2 $ calls;
datalines;
1A1 DEF 5
3A3 JKL 3
;
run;
data want;
merge table1 (in=a) table2 (in=b);
by key;
if not first.key then call missing(p2);
if a;
run;
试试这个。使用 left join
获取结果,Isnull
用 dot(.) 替换缺失值
SELECT a.[Key],
a.p1,
a.calls,
Isnull(b.p2, '.') -- For MYSQL change ISNULL to IFNULL()
FROM table1 a
LEFT JOIN table2 b
ON a.calls = b.calls
AND a.p1 <> b.p2