都市ごとにマージしたい 2 つのデータ セットがあります。問題は、1 つのデータセットに「Bently」、「Caroline」などの名前しかないことですが、他のデータセットには「Town of Bently」、「Village of Caroline」などがあります。それらは部分文字列を使用していますか?助言がありますか
4 に答える
次のような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
またはを使用して2つの名前間の編集距離を計算compged
し、その方法で一致を試みることができます(おそらく、ある制限を超える最も近い一致または最も近い一致を取得します)。
2番目のデータセットで、フォームが常に「word + of + actual_name」である場合、次のデータセットを使用します。
city = scan(city_old,-1);
次に、2つをmerge-またはprocsql-statementと比較できます。
ここに、スキャン機能のSASサポートへのリンクがあります。
常に '... of ' である場合は、"of" の位置を使用してガイドできます。Scan (... -1) は、複数の単語からなる都市 ("New York City") の場合、常に機能するとは限りません。
data test;
c1='Town of Bentley';
c1_of=find(c1,'of');
c2=substr(c1,c1_of+2);
put _all_;
run;
index関数を使用することをお勧めします。
http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000212242.htm
文字式で文字列を検索し、文字列が最初に出現する文字列の最初の文字の位置を返します。