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作为长度。数据分析师培训

最新文章

  1. 雅虎(yahoo)前端优化十四条军规
  2. 去块率波 Deblocking filter
  3. [hackerrank]The Love-Letter Mystery
  4. [BZOJ2173]整数的lqp拆分
  5. 在树莓派上安装leanote
  6. C#多显示器转换的两种方法——SetWindowPos,Screen
  7. 解密电子书之二:EPD控制芯片
  8. 销量预测和用户行为的分析--基于ERP的交易数据
  9. Spring Cloud Consul 实现服务注册和发现
  10. Ubuntu16下Hive 安装
  11. 【翻译】从头开始写一个时间序列数据库-Writing a Time Series Database from Scratch
  12. [AHOI2008]紧急集合 / 聚会
  13. Date类型与字符串之间的转换
  14. php设计模式-工厂模式(一)
  15. 第一次安装tomcat报错,出现failed to install tomcat8 service错误
  16. mongodb更新数组中的所有匹配项
  17. katalon系列十五:给浏览器添加cookie自动登陆
  18. xdebug常用配置
  19. 五十三 网络编程 TCP/IP简介
  20. TP细节总结1

热门文章

  1. SGI STL rope
  2. python笔记三
  3. (一)通过JAVA连接SAP (sapjco3.jar在Windows和MacOS上的配置)
  4. Hibernate之OID
  5. 区间dp及优化
  6. Mysql优化系列之查询性能优化前篇2
  7. Mybatis Resultmap 简化之超级父类
  8. 2019-8-31-dotnet-获取程序所在路径的方法
  9. JS规则 编程练习 考考大家的数学,计算以下计算公式的结果。然后在浏览器中运行一下,看看结果是否跟你的结果一致。
  10. LJJ爱数数