在Sas中拆分电子邮件地址

在Sas中拆分电子邮件地址,sas,Sas,有人知道如何在SAS中拆分电子邮件地址吗?情况就是这样: happy_new_year@gmail.commakannasi@yahoo.co.idnasigoreng@abc.net 然后将上述文本拆分为: happy_new_year@gmail.com|makannasu@yahoo.co.id|nasigoreng@abc.net 到目前为止,我还没有最好的解决方案如何分割它 谢谢因此,正如评论所说,对于大量的。*TLD来说,这可能很棘手。更不用说,你可以有一个tld的第一个字母的下

有人知道如何在SAS中拆分电子邮件地址吗?情况就是这样:

happy_new_year@gmail.commakannasi@yahoo.co.idnasigoreng@abc.net
然后将上述文本拆分为:

happy_new_year@gmail.com|makannasu@yahoo.co.id|nasigoreng@abc.net
到目前为止,我还没有最好的解决方案如何分割它


谢谢

因此,正如评论所说,对于大量的。*TLD来说,这可能很棘手。更不用说,你可以有一个tld的第一个字母的下一个地址,看起来像另一个tld。即,如果.xy和.xyz都是TLD,
me@here.xyzed@here.com将是模棱两可的。是
me@here.xy|zed@here.com
me@here.xyz|ed@here.com

也就是说,我会开始这样做

%let tlds = .com .net .edu .blah .fu .bar;

data _null_;
format str $2000.;
str = "bob@here.comchris@xyz.blahme@hrm.fu";

tlds = "&tlds";
format tld $4.;
do i=1 to countw(tlds);
    tld = scan(tlds,i);
    str = tranwrd(str,strip(tld),strip(tld)||"|");
end;
put str;
run;
返回

bob@here.com|chris@xyz.blah|me@hrm.fu|

根据需要添加逻辑,如附加TLD或新逻辑。

您要做的是获取电子邮件(.com、.co.id、.net等)的所有可能扩展名,并遍历字符串,直到找到其中一个。然后在该点拆分字符串,然后继续,直到遇到字符串的末尾。我对SAS一无所知,所以我不能再帮你了,对不起。不过,这可能很快就会变得像@Joe所说的那样棘手。我想说,对于这个普遍的问题,没有一个好的解决方案。您可以使用正则表达式来确定可能的停止点(.com.net等),但现在TLD已经多得多,这实际上是不可行的;即使你把它限制在普通的范围内,你也会得到各种各样的误报。