簡體   English   中英

基於一個列模式的 SAS/SQL 連接匹配另一列

[英]SAS/SQL join based on one column pattern matches another column

我有 2 個數據集需要在 id 字段上匹配:

數據1:

id
---------
00123abc5

數據2:

id
---
23a

我需要在id列上合並(SQL 樣式inner join )這兩個數據集,而不是data1.id = data2.id 我想要的是data1.id contains data2.id

所以我想在所有行id的第一個數據集字符串包含id第二個數據集的字符串。

在 SQL 中,使用LIKE運算符:

SELECT d1.id
FROM data1 d1 
INNER JOIN data2 d2 ON d1.id LIKE CONCAT('%', d2.id, '%')

正如 TheMouseMaster 所評論的那樣,如果在同一字段中碰巧找到多個 id,則此技術可能會生成重復的輸出行。 您可以使用DISTINCT來消除重復項:

SELECT DISTINCT d1.id
FROM data1 d1 
INNER JOIN data2 d2 ON d1.id LIKE CONCAT('%', d2.id, '%')

您可以使用索引功能

data have;
input id $9.;
datalines;
00123abc5
00543abc5
;
data have1;
input id $ col1;
datalines;
23a 22
43a 72
73a 82
;

  proc sql;
   create table want as 
  select a.id, col1
  from have a
  inner join
  have1 b
 on index(a.id, trim(b.id)) gt 0;

如果您只想要一個表中的行,請使用EXISTS

select d1.id
from data1 d1
where exists (select 1 from data2 d2 where d1.id like concat('%', d2.id, '%');

實際上,在 SAS 中,我會使用標准的連接運算符:

select d1.id
from data1 d1
where exists (select 1 from data2 d2 where d1.id like '%' || d2.id || '%';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM