我有两个数据集,我想通过城市合并。问题是,一个数据集只有名称,例如:“本特利”,“卡罗琳”等。但其他数据集有例如“本特利镇”,“卡罗琳村”等。无论如何合并他们使用子串?任何建议
答案 0 :(得分:2)
您可以index
使用proc sql
功能,如下所示:
data data_a;
input city $ x;
datalines;
London 1
York 4
Bukovica 10
Berlin 3
;
run;
data data_b;
input city $1-15 y;
datalines;
Good Old London 10
New York 40
Spisic Bukovica 100
;
run;
proc sql;
create table merge as
select a.city as city_a
,b.city as city_b
,x
,y
from data_a as a
inner join
data_b as b
on index(b.city, strip(a.city)) > 0 or index(a.city, strip(b.city)) > 0;
quit;
只需修改连接即可满足您的需求(内部,左侧,右侧,完整)。
如果您的城市名称不是彼此的子串,您可以尝试使用complev
或compged
计算两个名称之间的编辑距离,并尝试按照这种方式进行匹配(也许采用最接近的匹配或者最接近某些限制的匹配)。
答案 1 :(得分:1)
如果在第二个数据集中,表单始终是“word + of + actual_name”,那么我将使用带有
的datastepcity = scan(city_old,-1);
然后你可以将它们与merge-或proc sql-statement进行比较。
Here指向SAS支持扫描功能的链接。
答案 2 :(得分:0)
我建议您使用索引功能。
http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000212242.htm
在字符表达式中搜索字符串,和 返回第一个字符串的第一个字符的位置 字符串的出现。
答案 3 :(得分:0)
如果它总是'...',那么您可以使用“of”的位置来指导您。对于多字城市(“纽约市”),扫描(... -1)并不总是有效。
data test;
c1='Town of Bentley';
c1_of=find(c1,'of');
c2=substr(c1,c1_of+2);
put _all_;
run;