2017-04-07 2 views
0

次のコードを使用して、コード内の値が別のテーブルのレコードに見つからない場合は0、関連値は別のテーブルのレコードと一致します。PROCを使用してINステートメントでLIKEステートメントまたはINDEX関数を追加する方法SQL

proc sql; 
create table test as 
select id 
     ,a.company_yr in (select company_yr from table2) 
          and a.industry in (select industry from table2) 
          and a.sector in (select sector from table2) as match_ind 
from work.table1 a; 
quit; 

私の問題company_yr、業界や分野は常にためのデータで略語や他のミックスアップの完全な一致ではないということである(例えば、table2のでTABLE1の「FORD MOTORS」と「FORD」) 。 TRIMステートメントと組み合わせてLIKEステートメントまたはINDEXステートメントを使用して、インジケーターをより正確にするために文字列の一部と一致させるための方法が必要です。私はこれを効果的に達成する方法を見つけることができませんでした。

+0

正しい方法は、データを消去して正規化することです。他のすべては、誤ったマッチにつながる可能性があります。 – SqlZim

+0

@SqlZim私はそれが可能であることを望むが、私は自分の立場でそれを本当に行うことはできない。私は100%の正確さを必要としません、私は約95%が必要です。だからこそ、私はLIKEまたはINDEXソリューションを検討しています。 – Jarom

+1

あなたがcompany_yr、industry、およびsectorがtable2の同じ行にあるかどうか気にしないようにクエリを書いた方法ですが、各値はtable2に存在しますが、異なる行にある可能性があります。それは意図されているのでしょうか、あるいは同じ行に表示する必要がありますか? – Talmage

答えて

1

"strip()"関数を入れ子にした "compress()"関数や、楽しいためのいくつかの "upcase()"関数で置き換えてみましょう。サブクエリの平等をLIKEに変えることができますが、あなたがどのように一致させるかははっきりしません。

proc sql; 
create table test as 
select 
    id, 
    exists (select 1 from work.table2 b 
      where strip(a.industry) = strip(b.industry) 
      and strip(a.sector) = strip(b.sector) 
    ) as match_ind 
from work.table1 a; 
quit; 
関連する問題