sas正则式之prxparen
今天还是要继续正则式的内容,这周的内容是prxparen函数,这个函数我个人觉得特别有用,是因为他和“|”结合使用可以同时容纳很多种情况的字符串。
prxparse这个函数没有什么参数,就是填入prxparse正则式的字符返回对应的是praparse的哪一部分。我现在说你肯定很懵逼,来,我们举个栗子!
re=prxparse("/(one)|(two)|(three)/")
position=prxmatch(re,string)
现在用一个小例子再介绍这个函数
data
if
retain
input
position=prxmatch(pattern,string);
if
datalines;
one single digit 8 here
two 888 77
12345 1234 123 12 1
;
run;
结果:
如图所示,position是函数prxmatch的返回结果,即字符的位置,which_paren是prxparen的返回结果,即对应的是字符搜索的哪一部分。if
现在用一个实际数据处理中的例子再深化这个函数。
这是一份领导给我的数据,可以看到数据上中文字符之后还有一些乱七八糟的英文啊符号啊数字啊,当时领导的需求是,把这份数据清洗出来变成只用字符的变量以及不要用类似“黄山分行”这种字眼的存在。所以当下就写了以下这段代码解决的这个需求。来,上代码!
data
set
if
ret=prxparse("/(\D?\银行)|(\D?\金融)|(\D?\贷款)|(\D?\融资)|(\D?\保险)|(\D?\担保)|(\D?\信用[社合联])/");
retain
position=prxmatch(ret,QUERY_OPERATOR);
if
else
if
call
if
dd=substr(QUERY_OPERATOR,1,start)||"银行";
end;
if
dd=substr(QUERY_OPERATOR,1,start)||"金融公司";
end;
if
dd=substr(QUERY_OPERATOR,1,start)||"贷款公司";
end;
if
dd=substr(QUERY_OPERATOR,1,start)||"融资有限公司";
end;
if
dd=substr(QUERY_OPERATOR,1,start)||"保险有限公司";
end;
if
dd=substr(QUERY_OPERATOR,1,start)||"担保公司";
end;
if
dd=substr(QUERY_OPERATOR,1,start)||"农村信用合作社";
end;
end;
else
drop
run;
结果:
现在单独取一个if语句的下的执行语句介绍一下:
call
if
dd=substr(QUERY_OPERATOR,1,start)||"银行";
end;
call