2016-04-08 11 views
1

私はSASでファジーマッチングアルゴリズムを作成しようとしていますが、すべての可能なアドレスオプションのリストを作成するメカニズムに慣れてきています。アレイからアドレスリストを作成する

私はすなわち、聖、ストリート、アベニュー、アベニューなど

、共通のアドレス文字列のリストを作成するには、次にアドレスを取得し、文字列内の任意の単語が共通のアドレス文字列のリストと一致する場合、そのアドレスのすべての可能なシナリオを作成します。例えばので

101 N MAIN STに変換します:

私が上でこれをプログラムすることができます 101 N MAIN ST 101 Nメインストリート 101ノースメインセント 101ノースメインストリート小規模ですが、リストに必要な共通のアドレス文字列が約100ある場合はそうではありません。

+0

まだお持ちでない場合は、ここで行っている作業の一種である 'ngrams'をご覧ください。 SASにはいくつかの機能がありますが、この特定のアプローチよりも優れている方法のいくつかを処理する方法については、たくさんの情報があります(データステッププログラミングにアプローチする方法の手がかりを与えるかもしれません文献は主にpython/r/cです)。 – Joe

+0

lexjansen.comで検索すると、住所のクリーンアップと抽出に役立つたくさんの論文とコードが見つかります。一般的な方法は、コンポーネントに抽出し、標準化してから再フォーマットすることです。 – Reeza

答えて

0

一般的なもの(ST-> STREETなど)のリストをフォーマットに入れます。その後、PUTを使用して配列を作成したり、そのフォーマットでさまざまな単語を挿入したりすることができます。また、null以外が返された場合は、新しいビットを新しい配列要素に置きます。

ような何か:

ステップ1.メイクはあなたの関係を持つファイル

ステップ2.インポートをExcelはHLO =のための '' ファイルをExcel、およびフォーマットにインポートするPROCのFORMAT CNTLIN =オプションを使用して、そして、あなたは非常に柔軟な何かを持っている

data want; 
    set have; 
    do _i = 1 to countw(address); 
    *use CALL SCAN to find position of i'th word and extract to _ADDCHECK; 
    *use PUT with format created in step 2 to see if it matches; 
    if _addcheck ne ' ' then do; 
     *use CALL SCAN results combined with SUBSTR to put _ADDCHECK back in; 
     output; *or store in an array if you prefer; 
    end; 
    end; 
run; 

:O(その他オプション)

ステップ3のようなものでdatastepに適用します。

フォーマットでも動作する別のオプションは、アドレスを別々の単語に分割し、フォーマットとMULTILABELオプション(hlo = 'm')でPROC TABULATEを使用してより大きなリストを生成します(これは最初は少なくとも複数の行)。

関連する問題