楼主: sabin
8432 12

如何在字符串中查找重复子字符串的位置? [推广有奖]

  • 4关注
  • 2粉丝

硕士生

53%

还不是VIP/贵宾

-

威望
0
论坛币
1760 个
通用积分
0
学术水平
4 点
热心指数
11 点
信用等级
4 点
经验
185 点
帖子
216
精华
0
在线时间
113 小时
注册时间
2005-5-14
最后登录
2024-10-24

楼主
sabin 发表于 2013-12-17 01:46:07 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
我想在一条URL地址中定位重复出现某个子字符串的位置,但不知道用什么函数可以解决。
举例——
在字符串“ababaab”中,我想知道有几个“c”,尤其是每个“c”出现的具体位置是是什么
data _null_;
  string="acaaac";
  x1=scan(string,1,"c");
  x2=scan(string,2,"c");
  P_C_1=length(x1)+1;
  P_C_2=length(cats(x1,x2))+1;
  put P_C_1 P_C_2;
run;


但这样的办法真是十分笨拙,希望有更简单的。
谢谢
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:字符串 string length tring RING 字符串 如何

本帖被以下文库推荐

沙发
yeting2000 在职认证  发表于 2013-12-17 09:24:26
看看

藤椅
sabin 发表于 2013-12-17 09:54:10
yeting2000 发表于 2013-12-17 09:24
看看
大侠,谢谢先,

板凳
bobguy 发表于 2013-12-17 12:18:12
See below,

data _null_;
  string="acaaac";
  do i=1 to length(string);
    if char(string,i)='c' then put 'i=' i;
  end;
run;

报纸
zw612003 发表于 2013-12-17 22:31:03
bobguy 发表于 2013-12-17 12:18
See below,

data _null_;
我觉得他应该是想要字符串而不是单个字符。

地板
sabin 发表于 2013-12-18 18:38:11
zw612003 发表于 2013-12-17 22:31
我觉得他应该是想要字符串而不是单个字符。
楼上的zw612003阁下正解,,确实是要字符串而不是单个字符。

7
sabin 发表于 2013-12-18 18:39:01
整个问题若在SQL中很好解决,但在SAS中我竟然束手无策。

8
zw612003 发表于 2013-12-19 00:05:27
sabin 发表于 2013-12-18 18:39
整个问题若在SQL中很好解决,但在SAS中我竟然束手无策。
求教SQL高级写法。

9
yongyitian 发表于 2013-12-19 08:35:27
  1. /* prx functions work for this problem */

  2. data string;
  3.   if _n_ = 1 then do;
  4.       pt_1 = prxparse('/(c+)/');
  5.       retain pt_1;
  6.   end;
  7.      string="abcdefccghijkccclmnocccccxyz";
  8.      start = 1;
  9.      stop = length(string);
  10.      nc = 0;  
  11.   do i = 1 to 5 until (position= 0);
  12.      call prxnext(pt_1, start, stop, string, position, length);
  13.      nc+1;
  14.      if position ^= 0 then output;
  15.   end;
  16. drop pt_1 start stop i;
  17. run;

  18. proc print data=string; title 'string'; run; title;
复制代码
/* 找到字符串 ABC 的位置  */
  1. data string;
  2.   if _n_ = 1 then do;
  3.       pt_1 = prxparse('/(ABC)/');
  4.    retain pt_1;
  5. end;
  6.   string="acABCaABCaaABCc";
  7.   start = 1;
  8.   stop = length(string);
  9.   nc = 0;  
  10.   do i = 1 to 5 while (position^= 0);
  11.   call prxnext(pt_1, start, stop, string, position, length);
  12.   nc+1;
  13.    if position ^= 0 then output;
  14.   end;
  15.   drop pt_1 start stop i string length;
  16. run;
  17. proc print data=string; title 'string'; run; title;
复制代码

已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
Tigflanker + 5 + 3 + 3 + 3 感觉做这事还是正则靠谱

总评分: 论坛币 + 5  学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

10
playmore 发表于 2013-12-19 09:33:17
%let string=acabcaabcaaabcc;
%let string_find=abc;

data result(keep=pos);
        pos=1;
        do while (pos LT length("&string"));
                pos_sub=find(substr("&string",pos),"&string_find");
                if pos EQ 0 then pos=length("&string");
                else do;
                        pos=pos+pos_sub-1;
                        output;
                        pos=pos+length("&string_find");
                end;
        end;
run;

如果用DATA步的话可以像上面这么写,另外我觉得用proc fcmp写个函数也可以,只不过我还不会用
欢迎大虾补充
playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 13:47