2016-08-19 5 views
0

インデックス関数を使用して、AとBの文字列値を比較したいとします。私はAにその列にBが含まれているかどうか確認したい。私はそれを行う方法を知っている唯一の方法はインデックスですが、インデックスはそのパラメータに列名を許可しないという問題があります。文字列値を入力する必要があります。SAS Help:インデックス関数を使用して2つのカラムを比較する

試してみました:index(Address, HouseNumber)>0しかし、動作しません。

例:

Address  HouseNumber  
123 Road  Road 

だから私は、住所欄にはその場でハウス番号値が含まれているかどうかを確認したいです。それは直接の一致ではないが、Aに文字列が含まれているかどうかをチェックしたい。マクロ変数や配列を使うのは解決策だと思いますが、どうやってやるかわかりません。

+1

私はトムの答えが下にあると思いますが、完全なデータステップとして問題を再現するコードを入れれば、あなたの質問はもっと良い答えになります。 – Joe

答えて

3

すべての変数が固定長であるため、SASが行うパディングを考慮する必要があります。

data have ; 
    length Address HouseNumber $50; 
    infile cards dsd dlm='|'; 
    input address housenumber ; 
cards; 
123 Road|Road 
;;;; 

data want ; 
    set have ; 
    if index(address,strip(HouseNumber)); 
run; 
+0

'FIND()'には、両方のフィールドをトリミングする警告を受けて、トリミングを行う '' t'修飾子があります。 – Joe

+0

このコメントは私の人生を救った。なぜインデックスがうまく機能しないのか不思議でした。私はstrip()を追加しました。 – Paula

0

これは機能していますか?

data _null_; 
    a = '52 Festive Rd'; 
    b = 'Festive'; 
    if index(a,b) then put 'yes'; 
    else put 'no'; 
run; 
+0

問題を見るには、Bの値の最後にスペースを追加します。文字列リテラルにそれらを含めるか、割り当ての前に長さを7文字以上に設定します。 – Tom

+0

しかし、strip()を追加する必要がありました。私はこれを以前に試みましたが、両方の文字列が同じであっても私に結果を与えませんでした。ありがとう! – Paula

関連する問題