这是【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

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注