Sas 在字符串中搜索字符串

Sas 在字符串中搜索字符串,sas,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 RandomEm

我有一个如下所示的数据集,但包含数千行

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()
,但它们似乎都需要硬编码的值,这使得它们在这方面效率低下


谢谢大家!

FIND和
PRXMATCH
都可以正常工作,并且不需要硬编码值<代码>查找在这方面尤其有效。添加修饰符
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;