问题描述
我需要在数字后提取字符串。尽管问题在于字符串开头的数字位数不一致。我需要的是类似Flash Fill in Excel的东西。但是我将对100K +行执行此操作,因此Excel可能无法处理数据。例如:
这可能吗?
提前谢谢!
解决方法
您可以使用正则表达式替换(PRXCHANGE
),也可以谨慎使用VERIFY
函数。
示例:
data have;
input email $char25.; datalines;
[email protected]
[email protected]
[email protected]
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;
,
上面的示例应该可以,
但是假设某些电子邮件地址可以包含数字,例如[email protected]
,下面的代码应该会有所帮助:
data have;
input email $char25.; datalines;
[email protected]
[email protected]
[email protected];
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函数仅保留char值;
然后SUBSTRN-使第一个字符出现在电子邮件地址中;
在INDEXC之后-返回字符的位置;
最后再次SUBSTRN-从上一步提供的位置开始保留电子邮件的其余部分。
最终外观: [1]:https://i.stack.imgur.com/hFftg.png