2016-06-02 33 views
0

私は名前で一致させたい2つのファイルがあり、圧縮機能を使用してスペル・エラーを考慮したいと考えています。名前は完全に消去されており、検索スペースを減らすために使用できる他の有用な一致変数はありません。SAS proc sqlを使用してファジー・マージ

ファイルname1とname2にはそれぞれ500Kを超える行があるため、11時間後にこのコードは実行されません。

これをより効率的にコーディングする方法はありますか、それとも純粋にコンピューティングパワーによるものですか?

proc sql; 
    create table name1_name2_Fuzzy as 
    select a.*, b.* 
     from name1 as a 
     inner join name2 as b 
       on COMPGED(a.match_name, b.match_name) < 200; 
quit; 
+1

最初に実行して正確な一致を見つけることはできますか?それらを削除して、あいまいな試合を試してみませんか? – Reeza

+0

COMPGEDでsqlにする必要がありますか?私はCOMPLEV(日付ステップで)を使用して "マッチする" 2つの文字列のオッズを計算することに成功しました(通常0は正確なマッチです。私はCOMPLEVがなぜCOMPGEDより優れたソリューションになるのかについてのいくつかの声明を見つけましたが、私は本当の答えを投稿するのに十分な精通していません... http://compgroups.net/comp.soft-sys.sas/complev -vs-compged/1567642 – SMW

+0

"select"の代わりに "select distinct"を使用したいと思うかもしれませんが(この結合からの重複した観測を望む場合を除いて)、おそらく速度が上がらないでしょう。私はReezaに、不完全なものを心配する前に完璧なマッチを取り除くべきであることに同意する。 – superfluous

答えて

0

ここオフメモリの作業が、各match_nameの最初の文字が異なる場合、COMPGEDは、200の上に本当でしょうか?だから、あなたはそれらを試合と見なさないだろうか?

もしそうなら、最初の文字がmatch_nameであるインデックス付き列を各表に作成し、COMPGEDの前に結合します。これにより、ほとんどの不一致が解消されるはずであり、今のところ計算が必要なのは、COMPGEDです。

+0

はい、文字列の最初の文字を置換するためのコンパウンド関数のコストは200です!私はあなたの提案を試みましたが、私は同様の問題で終わります。新しいテーブルのサイズは元のコードのデカルト積よりもはるかに小さいですが、まだ大きすぎます。 – James

1

あなたは使用しなかった圧縮機能のパラメータを持っており、パフォーマンスを向上させることができます(11 ...の代わりに6または7時間)。

このパラメータはカットオフです。 300をカットオフとして選択した場合、単語間の距離が300になると、sasは計算を停止して300を出力します。

したがって、ここでは200を超えないようにカットオフ> 200を選択する必要があります。

Completed関数はCompgedより高速です。各オペレーションの正確なコスト(コールコンポストルーチン)を必要としない場合は、コンプリジェントの代わりにそれを使用することができ、数分または数時間の計算を減らすことができます。 Complevにはカットオフオプションもあります。

希望すると便利です。

関連する問題