sas正则式之prxparen

今天还是要继续正则式的内容,这周的内容是prxparen函数,这个函数我个人觉得特别有用,是因为他和“|”结合使用可以同时容纳很多种情况的字符串。

prxparse这个函数没有什么参数,就是填入prxparse正则式的字符返回对应的是praparse的哪一部分。我现在说你肯定很懵逼,来,我们举个栗子!

re=prxparse("/(one)|(two)|(three)/")

position=prxmatch(re,string)

就是这么说prxparse("/(one)|(two)|(three)/")搜索字符函数中/(one)|(two)|(three)/
用“|”分开了三个即将要搜索的字符,即‘’one”为第一个搜索字符,一旦在字符中发现“one”了就返回1,假设第一个发现的字符串是“three”就是返回3,所以返回刚才的例子就很容易理解了。

现在用一个小例子再介绍这个函数

data paren;

if _n_=1 then pattern=prxparse("/(\d
)|(\d\d )|(\d\d\d )/");

retain pattern;

input string $char30.;

position=prxmatch(pattern,string);

if position
gt 0 then which_paren=prxparen(pattern);

datalines;

one single digit 8 here

two 888 77

12345 1234 123 12 1

;

run;

结果:

如图所示,position是函数prxmatch的返回结果,即字符的位置,which_paren是prxparen的返回结果,即对应的是字符搜索的哪一部分。if position
gt 0 then which_paren=prxparen(pattern); 这里的if是为了确认是prxmatch搜索到位置的时候才判断字符是属于pattern的哪一部分。

现在用一个实际数据处理中的例子再深化这个函数。

这是一份领导给我的数据,可以看到数据上中文字符之后还有一些乱七八糟的英文啊符号啊数字啊,当时领导的需求是,把这份数据清洗出来变成只用字符的变量以及不要用类似“黄山分行”这种字眼的存在。所以当下就写了以下这段代码解决的这个需求。来,上代码!

data ss;

set dd;

if _n_=1 then

ret=prxparse("/(\D?\银行)|(\D?\金融)|(\D?\贷款)|(\D?\融资)|(\D?\保险)|(\D?\担保)|(\D?\信用[社合联])/");

retain ret;

position=prxmatch(ret,QUERY_OPERATOR);

if position
gt 0 then which_posit=prxparen(ret);

else which_posit=0;

if which_posit
gt 0 then do;

call prxsubstr(ret,QUERY_OPERATOR,start,length);

if start
gt 0 and which_posit=1 then do;

dd=substr(QUERY_OPERATOR,1,start)||"银行";

end;

if start
gt 0 and which_posit=2 then do;

dd=substr(QUERY_OPERATOR,1,start)||"金融公司";

end;

if start
gt 0 and which_posit=3 then do;

dd=substr(QUERY_OPERATOR,1,start)||"贷款公司";

end;

if start
gt 0 and which_posit=4 then do;

dd=substr(QUERY_OPERATOR,1,start)||"融资有限公司";

end;

if start
gt 0 and which_posit=5 then do;

dd=substr(QUERY_OPERATOR,1,start)||"保险有限公司";

end;

if start
gt 0 and which_posit=6 then do;

dd=substr(QUERY_OPERATOR,1,start)||"担保公司";

end;

if start
gt 0 and which_posit=7 then do;

dd=substr(QUERY_OPERATOR,1,start)||"农村信用合作社";

end;

end;

else dd='其他';

drop start length
which_posit position ret;

run;

结果:

现在单独取一个if语句的下的执行语句介绍一下:

call prxsubstr(ret,QUERY_OPERATOR,start,length);

if start
gt 0 and which_posit=1 then do;

dd=substr(QUERY_OPERATOR,1,start)||"银行";

end;

call prxsubstr 在之前的文章中已经介绍过了,所以如果忘了,再翻一下。然后if start
gt 0 and which_posit=1 then do ;这个语句中的which_posit=1 即就是搜索到“银行”两个字就是认定这个机构就是银行卡,然后就截取“银行”前面的那一串字,然后再接上“银行”两个字。这里你会问,问什么长度为什么用的是“start”这个变量,因为我们搜索的是”银行”两个字,所以返回的位置是银行的位置,但是我们需要的是“银行”前面的那一串字符,所以就使用start作为长度。数据分析师培训

sas正则式之prxparen的更多相关文章

  1. Python正则式的基本用法

    Python正则式的基本用法 1.1基本规则 1.2重复 1.2.1最小匹配与精确匹配 1.3前向界定与后向界定 1.4组的基本知识 2.re模块的基本函数 2.1使用compile加速 2.2 ma ...

  2. Python使用re模块正则式的预编译及pickle方案

    项目上线要求当中有言论和昵称的过滤需求, 客户端使用的是python脚本, python脚本中直接利用re模块来进行正则匹配, 一开始的做法是开启游戏后, 每帧编译2条正则式, 无奈运营需求里面100 ...

  3. PHP正则式PCRE

    PHP正则式PCRE的总结差不多就下边这些了.参考 PCRE与perl的差异 .   锚(^.$.\A.\Z/\z):^.$在多行模式下是非紧固的,在单行模式下是紧固的:而\A.\Z / \z在任何模 ...

  4. 正则双重过滤 /// splitKey1 第一个正则式匹配 /// splitKey2 匹配结果中再次匹配进行替

    /// <summary> /// 正则双重过滤 /// splitKey1 第一个正则式匹配 /// splitKey2 匹配结果中再次匹配进行替换 /// </summary&g ...

  5. JavaScript正则式练习

    使用正则式匹配第一个数字和最后一个数字,使用环视 str2 = 09051 : Fast Food Restaurants - Concession Stands/Snack Bars Delicat ...

  6. JavaScript正则式入门

    正则式 正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表通常被用来检索.替换那些符合某个模式(规 ...

  7. 关于C#判断是否是数字的正则式

    有话要说 今天我同事突然让我帮他看个问题,他说想不通为什么数据库中会有不合法的内容,我都已经用正则过滤了,并且在本地调通了的! 我问他是不是你正则有问题,他说没问题啊,前端和后端的正则是一样的,前端我 ...

  8. shell正则式解析身份证和手机号

    cat test2.html | sed -e 's/\(^\|[^0-9]\)\(13[0-9][0-9]\{8\}\|14[579][0-9]\{8\}\|15[0-3,5-9][0-9]\{8\ ...

  9. iOS开发中正则式的使用

    iOS开发中正则式的使用 第一:常规的使用方式 NSString *str = @"abcded111093212qweqw"; //找到内部一个即可 NSString *patt ...

随机推荐

  1. duilib教程之duilib入门简明教程8.完整的自绘标题栏

    看了前面那么多教程,相信对duilib已有基本映像了,我们就快马加鞭,做出一个完整的自绘标题栏吧~    看到下面这个效果图,小伙伴们是不是有点惊呆了呢~O(∩_∩)O~      duilib实现以 ...

  2. node-webkit笔记

    两个月前给一个运营站点做了个封皮,今天再做竟然忘了怎么搞了...为之文以志. 流程参考: http://www.cnblogs.com/2050/p/3543011.html 相关命令: copy / ...

  3. jquery 表单验证插件

    其他: <form action=""> First name: <input type="text" name="FirstNam ...

  4. SpringBoot之集成通用Mapper

    第一种: 1.引入POM坐标,需要同时引入通用mapper和jpa <dependency> <groupId>tk.mybatis</groupId> <a ...

  5. 提问(prompt 消息对话框)用于询问一些需要与用户交互的信息。弹出消息对话框(包含一个确定按钮、取消按钮与一个文本输入框)

    提问(prompt 消息对话框) prompt弹出消息对话框,通常用于询问一些需要与用户交互的信息.弹出消息对话框(包含一个确定按钮.取消按钮与一个文本输入框). 语法: prompt(str1, s ...

  6. Redis理解和使用

    摘抄并用于自查笔记 1. Redis简介 我们日常Java Web开发,一般使用数据库进行存储,在数据量较大的情况下,单一使用数据库保存数据的系统会因为面向磁盘,磁盘读写速度比较慢而存在严重的性能弊端 ...

  7. css3 html5 手机设备 列表的弹回和加速移动

    <style type="text/css"> * { margin: 0; padding: 0; } .min { width: 350px; height: 40 ...

  8. 阿里云全站加速DCDN全面支持WebSocket协议

    WebSocket协议可以为网站和应用提供真正的双向通信,具有控制开销.保持连接状态.更强实时性.更好的压缩效果等优点,是当下低延时应用最常采用的一种技术协议.为了更好的满足客户在实时通讯场景下的加速 ...

  9. ros Python找不到msg包的问题解决办法

    https://answers.ros.org/question/113671/catkin-package-cannot-find-own-message-type-python/ 原因是因为.py ...

  10. linux和window环境下安装ruby和sass

    linux下安装ruby 下载linux的ruby安装包    http://www.ruby-lang.org/en/downloads/ 将ruby安装包在linux环境下解压    tar -x ...