在字符串中搜索字符串

时间:2016-09-13 14:25:07

标签: sas

我的数据集如下所示,但包含数千行。

Firstname   Lastname        Emailaddress
John        Smith           John.Smith@mail.com
Anna        Blake           Anna.Blake@mail.com
Susan       Peterson        1962_Peterson_Susan@mail.com
David       Anderson        RandomEmail_1956@mail.com

我想创建一个变量,告诉我电子邮件地址是否包含人员的名字或名字,而忽略了位置。如果找到匹配项,则变量将返回值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;

运行;

此逻辑将返回Match = 1表示前两个结果,Match = 0表示最后两个结果。但是我希望第三次观察返回Match = 1,因为它包含了人的名字。

我的问题是,是否有一个SAS命令允许我遍历变量Firstname和Lastname中的所有观察结果,然后扫描是否在变量EmailAddress中找到了名称。

我尝试使用Find()PrxMatch(),但它们似乎都需要硬编码值,因此无法实现此目的。

谢谢!

1 个答案:

答案 0 :(得分:2)

FINDPRXMATCH都可以正常工作,并且不需要硬编码值。 FIND对此非常有效。添加修饰符t以告诉它修剪firstname / lastname变量中的空格(或使用trim函数)。

data MyDataSet;
  length firstname lastname emailaddress $50;
  input Firstname $  Lastname  $      Emailaddress $;
datalines;
John        Smith           John.Smith@mail.com
Anna        Blake           Anna.Blake@mail.com
Susan       Peterson        1962_Peterson_Susan@mail.com
David       Anderson        RandomEmail_1956@mail.com
;;;;
run;

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

我在|使用OR两个查找函数的值,但如果您愿意,可以更明确地执行此操作。