查找与另一个数据集中的字段部分匹配的观察结果

时间:2016-05-13 12:02:15

标签: sql sas string-matching

案例如下:我有两个数据集。从第一个开始,我需要在field中找到包含field2中第二个数据集field ----- dsggagfa 837 dgfsdg 879 thh gasgg 7999 ghth 中任何一个数字的每个观察结果。

第一组数据:

field2
------
837
879

第二组数据:

field
-----
879 thh
fegfrsg 879 thh

预期结果:

select * 
  from firstdata 
 where field like in (select field2 from seconddata);

 or

select * 
from firstdata 
where field in %"select field2 from seconddata"%;

我正在寻找类似的东西:

this.async(function () { ....})

2 个答案:

答案 0 :(得分:2)

这将有效,因为表2中的field2是数字。此外,使用prxmatch\b(字边界),确保您不会错误地选择,例如,如果您的表2包含数字799(或999,79,则为“gasgg 7999 ghth”) 99)。

data t1;
  input field $32.;
  datalines;
dsggagfa 837 dgfsdg
879 thh
gasgg 7999 ghth
;

data t2;
  input field2 8.;
  datalines;
837
879
;

proc sql;
  select t1.field
    from t1, t2
   where prxmatch(cats("/\b",strip(put(t2.field2, 8.)),"\b/"), t1.field);
quit;

结果

field
-----
dsggagfa 837 dgfsdg
879 thh

答案 1 :(得分:1)

假设field2是一个字符串,这将起作用。   index会在field2中返回field的位置。   在field2中找到field时,where条件为TRUE。

select a.* 
       from firstdata a, seconddata b
          where index(a.field, b.field2)
       ;