Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 在SAS中提取数字后的字符串_String_Sas_Extract_Datastep - Fatal编程技术网

String 在SAS中提取数字后的字符串

String 在SAS中提取数字后的字符串,string,sas,extract,datastep,String,Sas,Extract,Datastep,我需要提取数字后面的字符串。尽管问题是字符串前面的位数不一致。我需要的是类似于Excel中的Flash填充的东西。但我将对超过100K行执行此操作,因此Excel可能无法处理数据。例如: 12345678aaa@mail.com 12345bbb@mail.com 123456789ccc@mail.com 我希望使用提取的字符串创建另一个变量,如下所示: aaa@mail.com bbb@mail.com ccc@mail.com 这可能吗 提前谢谢你 您可以使用正则表达式替换(PRXCHAN

我需要提取数字后面的字符串。尽管问题是字符串前面的位数不一致。我需要的是类似于Excel中的Flash填充的东西。但我将对超过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;
首先,我们使用压缩函数M只留下字符值
然后SUBSTRN-使第一个字符出现在电子邮件地址中
在than INDEXC之后-返回字符的位置
最后,再次使用SUBSTRN-离开电子邮件的其余部分,从前面步骤中提供的位置开始

最终外观:
[1] :

嗨,理查德,谢谢你的回答!如果电子邮件中也包含数字,这也能捕获吗?例如,第一个数据是1234aaa01@mail.com并且期望的输出是aaa01@mail.com? 谢谢您可以自己尝试,但是的,两种方法都只会去掉前导数字。小提示:如果电子邮件值未经验证,可能会出现一些罕见的情况,即数字前有前导空白字符(\r\t,空格,硬空格),并且您可能会判断转换为“不起作用”。假设您的电子邮件地址格式为小写。如果没有,您可能需要更改
COMPRESS
函数中的'abcdefg..xyz'以匹配您的情况