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;