在实际工作中我们需要提取某文本中需要的信息,如详细地址中提取省、市、区或某用药信息中提取药品名称等等。
一、excel方法 在excel中字符截取函数主要有三个,left,right和mid函数。
1.1 left 函数 顾名思义,left函数从左开始截取多少字符,因此有两个参数,被截取的字符文本(text)和截取位数(num_chars),默认是从左第一个字符开始截取,在未指定第二个参数时,默认提取第一个字符。如下。
1.2 Right函数 则是反向截取,原理同left如下:
1.3 Mid函数 则是从中间某位置开始截取几位字符,因此有三个参数,分别为被截取文本(text),中间开始位置(start_num)和截取位数(num_chars),中间开始位置可以任意合理定义,因此这个函数可以代替left和right函数。
有时字符串较复杂,我们不能确定某截取的字符在被截取文本的第几位时,需要使用find函数确定截取字符的位置。如下,查找不到相应字符的返回无效值。Mid函数是相对灵活的截取函数。
二、sas应用 以上为excel截取字符的相关函数,sas和excel某些函数意义是相同的如,如max,min,find等等,那么字符串截取相关的函数两者是否仍具有相同的规则?
2.1 left和right函数 Left函数在sas的定义为“Left aligns a character expression.”返回的为左对齐字符串,即把开始空格移到末尾,字符串长度不改变,原来的leading blanks变为trailing blanks。所以在sas里left不再是左截取意义的函数,而是左对齐的函数(长度不改变,空格位置发生变化,当然在开始位置无空格的文本处理结果相同)。Right函数定义“Right aligns acharacter expression.”,右对齐,尾部空格移到开始位置。
2.2 substr函数
(1) 在sas中可用的截取直接相关函数,scan,substr。Scan函数在sas的定义为“Returnsthe nth word from a character string.”,这个函数相对简单,具体见查看与帮助。Substr函数的应用类似于mid函数,具有三个参数,SUBSTR(character-expression,position-expression[, length-expression])。灵活使用该函数也是需要结合find函数返回被截取字符首个字符的位置两个函数的应用同excel。有时我们截取固定长度字符,但其中可能包含不需要的字符,因此有时需要使用compress函数进一步去除不要的文本。
data test;
input id :$3. exams &$30.;
math=substr(exams,find(exams,'math','i',1),4);
Enlish=substr(exams,find(exams,'english','i',1),7);
cards;
001 math Chinese
002 English math chemistry
003 Chinese phisics
;
run;
(2)Substr函数的而另一种应用就是字符串替换.当substr函数放在等号右边为截取字符,而当substr函数放在等号左边为替换函数。
data test;
input id :$3.exams &$30.;
math=substr(exams,find(exams,'math','i',1),4);
Enlish=substr(exams,find(exams,'english','i',1),7);
substr(exams,find(exams,'Chinese','i'),7)='yuwen';
cards;
001 math Chinese
002 English math chemistry
003 Chinese phisics
;
run;
在sas中字符还可以用替换函数:translate,tranwrd,transtrn,详见帮助文档。
(3)Substr+compress,如完成一项工作甲乙丙丁用来不同的时间,如下:“kd”是两个修饰语,保留数字(keep digit)的意思,详见帮助文档。
data test1;
input time :$12.;
hour=compress(substr(time,1,2),,'kd');
cards;
5hours
12hours
;
run;
掌握以上字符截取函数,在一段文本,就可以轻松自如的提取相关信息,软件间的某些应用也是相通的,融会贯通,善于总结,条条大路通罗马,结果只有一种,过程可以多样,在于掌握工具的程度。
联系客服