提取SAS中数字后面的字符串



我需要提取数字后面的字符串。尽管问题是字符串前面的位数不一致。我需要的是类似的东西,比如Excel中的Flash Fill。但我将对100K以上的行执行此操作,因此Excel可能无法处理数据。例如:

12345678aaa@mail.com

12345bbb@mail.com

123456789ccc@mail.com

我想用提取的字符串创建另一个变量,例如:

aaa@mail.com

bbb@mail.com

ccc@mail.com

这可能吗?

提前谢谢!

您可以使用正则表达式替换(PRXCHANGE(,或者小心使用VERIFY函数。

示例:

data have;
input email $char25.; datalines;
12345678aaa@mail.com
12345bbb@mail.com
123456789ccc@mail.com
1234567890123456789012345
;
data want;
set have;
mail1 = prxchange('s/^d+//',-1,email);
if email in: ('0','1','2','3','4','5','6','7','8','9') then 
mail2 = substr(email||' ',verify (email||' ', '0123456789'));
run;

上面的例子应该是可以的,

但假设一些电子邮件地址可能有数字,例如123abc001@mail.com,我下面的代码应该会有所帮助:

data have;
input email $char25.; datalines;
12345678abc01@mail.com
12345bcde@mail.com
123456789cdefg1@mail.com;

PROC SQL;
CREATE TABLE WORK.QUERY_FOR_HAVE_0003 AS 
SELECT t1.email, 
/* want */
(substrn(t1.email,INDEXC( t1.email, SUBSTRN(COMPRESS(t1.email, 'abcdefghijklmnopqrstuvwxyz', 'k'), 1, 1)))) 
AS want
FROM WORK.HAVE t1;
QUIT;

首先,我们使用COMPRESS函数m只保留char值
然后SUBSTRN-让第一个字符出现在电子邮件地址中
After than INDEXC-返回字符的位置
最后再次SUBSTRN-离开电子邮件的其余部分,从前一步提供的位置开始。

最终外观:[1] :https://i.stack.imgur.com/hFftg.png

最新更新