这是【SAS正则表达式】系列的第三集,全系列请在后台回复【SASRE】获取
【SAS Says·扩展篇】庖丁解牛割数据! | 3. call ()
0. 前集回顾
1. 新的问题
2. 初识 ()
3. 问题解决
0. 前集回顾:
刚毕业的小王来到一家零售公司的数据部门做一名分析师,上班的第一天,产品部的妹子就找他来解决一个问题:
数据库中有一份长长的产品名单,名单中有的是产品的名字,有的是产品的编号,产品部的妹子只想要产品的编号的那些行(下图红色字体的),以做更深一步的分析。
(01)1872-8756
Body shop P1
Book B13
(05)9212-0098
PD(05)9206-4571
(12) 6753-5513
None here
PD(12)6434-4532
P&
......(未显示完)
红色字体的编号似乎看起来没有什么容易把握的规律:占位符不一样、也不全都是数字、有的行的括号后面还有空格等等,小王利用正则表达式,一分钟不到就解决了。
a=("/(dd) ?d{4}-d{4}/", name);
if a GT 0 then ;
这是第一集的内容:
我们也可以用()先将正则表达式存起来:
=("/(dd) ?d{4}-d{4}/")
a=(, name);
if a GT 0 then ;
这是第二集的内容:
提取的结果如下:
1. 新的问题
产品部门的妹子发现了一个新问题:
PC : (09) 1352-3154
这一行产品的名字和产品编号混在了一起,以前的代码可以将这行整行都留下来,但是substr,产品部的妹子表示,她希望可以把名字给屏蔽掉substr,只保留编号。
好吧,我们的处理方式可能要变一下,现在我们的产品名单中,就多了一行:
(01)1872-8756
Body shop P1
Book B13
(05)9212-0098
PD(05)9206-4571
phone
(12) 6753-5513
None here
PD(12)6434-4532
P&D
PC : (09) 1352-3154
我们要留下红色字体的行,因为他们包含了产品编号,并且还要把,非编号的部分去掉,比如最后一行的PC :部分。
这里咱们推荐使用+组合的方式。
2. 初识()
这个函数用来获取一段特定字符在一句话中的详细位置:开头、结尾、占位长度,它的格式为:
Call ( -id,, start, )
这样,我们就获取了-id在里的起始位置、长度,然后再用()就可以在中只提取出正则表达式的内容。
先看一个简单的例子:
下面有两句话:
=” jun I love uvery much !”
=”Jack Ma I love u !”
提取出“ jun”,如果有的话就提取出来,如果没有的话就什么都不提取。实现代码如下:
=" jun I love u very much!";
="Jack Ma I love u very much !";
*提取出里的;
=('/ jun/');
call (, , ,);
call (, , ,);
a=(,, );
b=(,, );
put a= b=;
run;
输出结果为:
3. 问题解决
现在,想一下开头的那个问题,我们现在只需要将产品编号提取出来。
data ;
if _N_=1then =("/P?D?(dd) ?d{4}-d{4}/");
input name $.;
id $ 20;
call (,name,start,);
if GT ;
id=(name,start,);
end;
keep id;
(01)1872-8756
Body shop P1
Book B13
(05)9212-0098
PD(05)9206-4571
(12)6753-5513
None here
PD(12)6434-4532
P&
PC :(09) 1352-3154
title' ID';
var id;
run;
输出结果为:
任务完成了。
等一等,产品部的妹子说:
“有的编号里,括号后面带空格,你也给提取出来了,太感谢你了,干脆好人做到底,再帮我把编号里的这个空格去掉吧~”
“我ci~ao~”
好吧,这个问题其实也非常的简单,只需要在这段代码
if GT ;
id=(name,start,);
的前面加一句:id=(id, “ ”);
就可以了。
做个小游戏,您觉得本【SAS正则表达式】系列如何?
1、不好——跳转至A
2、好——跳转至2.1
2.1 打赏吗?
打赏——跳转至B
不打赏——跳转至2.2
2.2 点击文末广告?
点击——跳转至C
不点击——跳转至A
A 有什么建议意见呢?您可以在文末评论区留言,帮我做的越来越好!
B 谢谢爷~!劳驾您在文末打赏,我会再接再厉哒!
C 谢谢小哥,谢谢美女~!广告商会给我打赏哒!
限时特惠:本站持续每日更新海量各大内部创业课程,一年会员仅需要98元,全站资源免费下载
点击查看详情
站长微信:Jiucxh