2016-09-13 13 views
1

私は次のようなデータセットを持っていますが、何千もの行が含まれています。文字列内の文字列を検索

Firstname Lastname  Emailaddress 
John  Smith   [email protected] 
Anna  Blake   [email protected] 
Susan  Peterson  [email protected] 
David  Anderson  [email protected] 

私は、電子メール・アドレスは位置を無視して全く最初の人物や姓を含むされている場合私に指示変数を作成します。一致が見つかった場合、変数は値1を返し、一致が見つからない場合は値0を返します。

ほとんどの場合、以下のロジックを作成しました。

Data CheckNames; 

    Set MyDataSet; 

LenFM = Length(FirstName); 
LenLM = Length(LastName); 

If Substr(EmailAddress,1,LenFM) = FirstName or Substr(EmailAddress,1,LenLM) = LastName then Match = 1; 

Else Match = 0; 

実行;

このロジックは、最初の2つの結果で一致= 1、最後の2つで一致= 0を返します。しかし、私はそれが人の名前を含んでいるので、3回目の観察のためにMatch = 1を返すことを望みます。

変数EmailAddressに名前が含まれているかどうかを調べる変数FirstnameとLastnameのすべての観測をループできるSASコマンドがあるのは私の質問です。

私はFind()PrxMatch()を試しましたが、両方ともハードコードされた値が必要と思われるため、この目的には非効率的です。

ありがとうございました!

答えて

2

FINDPRXMATCHの両方が正常に動作し、ハードコードされた値の要件はありません。 FINDは特にこれに適しています。修飾子tを追加して、firstname/lastname変数(またはtrim関数を使用)からスペースを削除するように指示します。

data MyDataSet; 
    length firstname lastname emailaddress $50; 
    input Firstname $ Lastname $  Emailaddress $; 
datalines; 
John  Smith   [email protected] 
Anna  Blake   [email protected] 
Susan  Peterson  [email protected] 
David  Anderson  [email protected] 
;;;; 
run; 

Data CheckNames; 
    Set MyDataSet;  
    Match = find(EmailAddress,Firstname,'t') | find(EmailAddress,LastName,'t'); 
run; 

私は一緒にORにそこ2つの検索機能の価値観を|を使用しますが、ご希望の場合は、より明示的にそれを行うことができます。