Соединение SAS / SQL на основе одного шаблона столбца соответствует другому столбцу - PullRequest
0 голосов
/ 26 января 2019

У меня есть 2 набора данных, которые мне нужно сопоставить в поле id:

data1:

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

data2:

id
---
23a

Мне нужно объединить (в стиле SQL inner join) эти два набора данных в столбце id, но не data1.id = data2.id. То, что я хочу, это data1.id contains data2.id.

Итак, я хочу, чтобы все строки, где строка id в первом наборе данных содержит строку id второго набора данных.

Ответы [ 3 ]

0 голосов
/ 26 января 2019

Используйте 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 || '%';
0 голосов
/ 26 января 2019

Вы можете использовать индексную функцию

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;
0 голосов
/ 26 января 2019

В SQL используйте оператор LIKE:

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

Как прокомментировал TheMouseMaster, этот метод может генерировать дублированные выходные строки, если в одном и том же поле обнаружены несколько идентификаторов.Вы можете использовать DISTINCT для устранения дубликатов:

SELECT DISTINCT d1.id
FROM data1 d1 
INNER JOIN data2 d2 ON d1.id LIKE CONCAT('%', d2.id, '%')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...