登录
首页精彩阅读SAS正则式之prxsubstr 以及prxnext
SAS正则式之prxsubstr 以及prxnext
2017-03-31
收藏

SAS正则式之prxsubstr 以及prxnext

今天介绍的正则式中的prxsubstr函数以及prxnesth函数。

这两个函数需要配合call使用,生成start以及length两个变量以供后面的使用。先介绍基本的参数。

Call prxsubtr(pattern_id,string,strat,length)

pattern_id:跟prxmatch的用法一样,需要填入prxparse函数规定的字符形式,需要规定一个变量储存。譬如re=prxparse(‘\/d/d/d\’)即搜索任意三个数字。

String:填入的是你要搜索的目标,即你在哪里搜索上面的任意三个数字;

Start:这参数不用填,这个数字是运行之后会返回的变量,即在搜索目标中的起点位置

Length:跟start的意思一样,但是如果是已经知道位数的这个参数就没上面意义了,如果对于re=prxparse(‘\/d+\’)就有意义啦。

那么趁热打铁,来个例子;

datazipcode;

if_n_=1thenre=prxparse("/ \d{5}(-\d{4})?/");

retainre;

inputstring$80.;

lengthzip_code$10.;

callprxsubstr(re,string,start,length);

ifstart gt0thendo;

zip_code=substr(string,start+1,length+1);

output;

end;

datalines;

john smith 12 broad street flaemington, nj 08822

philip judson apt #1,building 7 777 route 730 kerrville, tx 78028

dr.roger alan 44 commonwealth ave. boston, ma 02116-7364

;

procprintdata=zipcodenoobs;

title"listing of data set zipcode";

run;

结果:

代码中寻找的prxparse("/ \d{5}(-\d{4})?/");在任意五个数字之前有一个空格,看清楚哈,\d{5}前面是有一个空格的,然后不知道后面是否接着“-\d{4}”的数字串。这里的substr(string,start+1,length+1)为什么要加1呢,因为有空格的存在,空格也占一个字符。估计这么一个简单的例子,也能知道prxsubstr的用法了。

接下来介绍的是prxnest这个函数。

Call prxnext(pattern_id,start,stop,position,length)

pattern_id:跟上面的那个prxsubstr一样填的是prxparse返回的搜索的目标;

start:就是你想在目标变量中那个位置开始搜索;

stop:就是你想在目标变量中的那个位置结束搜索。

Position:发现目标字符串的开始位置,所以这里的start跟之前的start是不一样的,要记住。

Length:这个就跟上面的prxsubstr的length一样,可以参照上面的。

那现在话不多说,直接上个例子!!

datafind_num;

if_n_=1thenret=prxparse("/\d+/");

retainret;

inputstring$40.;

start=1;

stop=length(string);

callprxnext (ret,start,stop,string,position,LENGTH);

ARRAYX[5];

DOI=1TO5WHILE(POSITION GT0);

X[I]=INPUT(SUBSTR(STRING,position,length),9.);

callprxnext(ret,start,stop,string,position,length);

end;

keepx1-x5 string;

datalines;

this 45 line 98 has 3 numbers

none here

12 34 78 90

;

procprintdata=find_numnoobs;

title"listing of data set find_num";

run;

结果是:

这个过程就是把string中全部的数字的部分提取出来,并赋予给x1-x5,这个就是涉及到你要生成多少个xi的问题,建议看下最长的那个观测能生成的数字个数,就设置i等于多少。这里眼神一下,譬如你先有份数据是什么“2016年12月5号,在麦当来消费56块钱”,你这时候需要提取这个时间以及金额就可以运用这个过程啦。数据分析师培训


数据分析咨询请扫描二维码

客服在线
立即咨询