SAS中文论坛
标题:
求教:如何获得一个字符串在另一个字符串中出现的次数
[打印本页]
作者:
shiyiming
时间:
2003-10-16 16:00
标题:
求教:如何获得一个字符串在另一个字符串中出现的次数
比如'*'在'1*23**4*5'中出现了4次。
有什么函数直接有此功能吗?用什么函数最好?
作者:
shiyiming
时间:
2003-10-16 16:52
忙里偷闲,hehe!
data tem;
src='1**c*deab*cc*cd';
rc=length(trim(src))-length(compress(trim(src),'*'));
;run;
proc print;run;
我好像没有看过此类直接的函数,以上的先试试看吧。
作者:
shiyiming
时间:
2003-10-16 17:00
这个方法显然比我的substr的方法强多了,谢谢!
作者:
shiyiming
时间:
2003-10-20 11:57
[quote="willon":4c82a]忙里偷闲,hehe!
data tem;
src='1**c*deab*cc*cd';
rc=length(trim(src))-length(compress(trim(src),'*'));
;run;
proc print;run;
我好像没有看过此类直接的函数,以上的先试试看吧。[/quote:4c82a]
这个方法只能针对单字符,对[b:4c82a][u:4c82a]包含2个或2个以上的字符串[/u:4c82a][/b:4c82a],如[b:4c82a]cc[/b:4c82a],则不能获得正确的rc。
改良方法有2个:
1/ 若SASV9+,则用函数count()
2/ 用do循环
data tem(drop =src i);
src='1**c*deab*cc*cd';
i=index(src, 'cc');
do while (i>0);
rc + 1;
src=substr(src, i+1);
i=index(src, 'cc' );
end;
run;
另外有个疑问,你所指的[b:4c82a][u:4c82a]字符串记数的概念[/u:4c82a][/b:4c82a]。
src ='1**c*deab*cc*cd';
按您的要求,count(cc)=1还是4?
我的两个方法指的是count(cc)=1。若要求=4则前面的朋友方法也是不错的。
作者:
shiyiming
时间:
2003-10-20 12:37
try this
data tem;
src='1**c*deab*cc**cd';
repl='**';
rc=(length(src)-length(compress(tranwrd(src,repl,''),'')))/length(repl);
put rc=;
;run;
作者:
shiyiming
时间:
2003-10-20 13:54
tranwrd + length是个非常简洁高效的方法。谢谢!
为了得到和willon相同的结果,我的程序需要修改一下。
data tem(drop =src i);
src='1**c*deab*ccc*cd'; /*3c*/
rep ='cc';
i=index(src, rep);
do while (i>0);
rc + 1;
*src=substr(src, i+ 1);
[color=red:49e2b]src=substr(src, i+ length(rep));[/color:49e2b]
i=index(src, rep );
end;
run;
如:src='1**c*deab*ccc*cd'; rep ='cc'
修改前rc=2 修改前rc=1
根据实际计数需要,修改不同。
在SASv9+还有个函数COUNTC()值得推荐。
欢迎光临 SAS中文论坛 (http://mysas.net/forum/)
Powered by Discuz! X3.2