|
地板

楼主 |
发表于 2011-10-15 12:25:11
|
只看该作者
Re: 如何把一字符中的所有标点符号压缩掉
[code:1qq3y5b7]data want;
set your;
length flag $30;
if anypunct(_char_); *只对包含有标点的字符才接着执行下边的操作,否则系统陷入死循环;
last_pos=lengthn(_char_)-anypunct(reverse(_char_)); *直接定位最后一个标点的位置,若最后字符为标点符号,可直接取字符字符的逻辑长度,否则也会陷入死循环;
n1=anypunct(_char_); *第一个标点符号的位置;
n2=notpunct(_char_,n1+1); *紧挨着n1处标点符号后的第一个非标点字符的位置;
len_p=n2-n1; *标点符号的长度;
punct=substrn(_char_,n1,len_p); *提取n1处开始,长度为len_p的标点符号;
flag=punct; *记录标点符号;
do while(n2<last_pos and n1<last_pos); *提取所有的字符_char_中的标点符号并记录在flag中;
n2=notpunct(_char_,n1+1);
len_p=n2-n1;
punct=substrn(_char_,n1,len_p);
flag=trimn(flag)||strip(punct);
n1=anypunct(_char_,n2);
end;
compress=compress(_char_,quote(strip(flag))); *对flag中记录的所有标点符号进行压缩处理;
run;[/code:1qq3y5b7] |
|