1

都市ごとにマージしたい 2 つのデータ セットがあります。問題は、1 つのデータセットに「Bently」、「Caroline」などの名前しかないことですが、他のデータセットには「Town of Bently」、「Village of Caroline」などがあります。それらは部分文字列を使用していますか?助言がありますか

4

4 に答える 4

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またはを使用して2つの名前間の編集距離を計算compgedし、その方法で一致を試みることができます(おそらく、ある制限を超える最も近い一致または最も近い一致を取得します)。

于 2013-01-15T09:11:33.497 に答える
1

2番目のデータセットで、フォームが常に「word + of + actual_name」である場合、次のデータセットを使用します。

city = scan(city_old,-1);

次に、2つをmerge-またはprocsql-statementと比較できます。

ここに、スキャン機能のSASサポートへのリンクがあります。

于 2013-01-15T08:47:56.943 に答える
0

常に '... 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;
于 2013-01-15T15:20:11.787 に答える
0

index関数を使用することをお勧めします。

http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000212242.htm

文字式で文字列を検索し、文字列が最初に出現する文字列の最初の文字の位置を返します。

于 2013-01-15T00:12:28.503 に答える