楼主: firefox29
5963 9

SAS 如何保留重复字符串的唯一值 [推广有奖]

  • 11关注
  • 1粉丝

博士生

28%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0.2251
学术水平
1 点
热心指数
1 点
信用等级
1 点
经验
3694 点
帖子
131
精华
0
在线时间
305 小时
注册时间
2012-1-23
最后登录
2023-6-20

楼主
firefox29 发表于 2014-12-3 11:00:02 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
比如一个字符串:'CCCCCBBBBBBBBAAAAAA'   以A,B,C为最小单位,希望删去某一字符的重复值,得到结果'CBA',换言之保留了字符的原始顺序。更复杂一些如果是'BBCCCAABBBAACCCCCC' 则期望得到'BCABAC'这样。期待大侠们指点啊!!谢谢!!
PS.原始字符串的最长长度是110.
二维码

扫码加我 拉你入群

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

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

关键词:字符串 caba 重复值 CCB CBA 字符串 如何

本帖被以下文库推荐

沙发
mingfeng07 学生认证  发表于 2014-12-3 12:38:53
  1. data a;
  2. length value  $ 200;
  3. input value $ @@;
  4. cards;
  5. cccccccbbbbbaaaa
  6. ggggdddwwww
  7. bbccaaccbbaa
  8. ccggbbbcccgggg
  9. ;
  10. run;
  11. proc sql;
  12. select max(length(value)) into:n from a;
  13. quit;
  14. data b;
  15. length new_value $ 100;
  16. set a;
  17. array a{&n.} $  _temporary_;
  18. array b{&n.} $   _temporary_;
  19. do i=1 to &n.;
  20. a(i)=substr(value,i,1);
  21. end;
  22. b(1)=a(1);
  23. do i=2 to &n.;
  24. if a(i)=a(i-1) then b(i)='';
  25. else b(i)=a(i);
  26. end;
  27. do i=1 to &n.;
  28. new_value=cats(new_value,b(i));
  29. end;
  30. run;
复制代码
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
firefox29 + 1 + 1 + 1 + 1 精彩帖子

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

藤椅
teqel 发表于 2014-12-3 12:41:41
DATA AAA;
        A='CCCCCBBBBBBBBAAAAAA';
        A=UPCASE(A);

        DO I=LENGTH(A) TO 2 BY -1;
                IF SUBSTR(A,I,1)=SUBSTR(A,I-1,1) THEN
                        SUBSTR(A,I,1)='';
        END;
        A=COMPRESS(A);
        DROP I;
RUN;
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
firefox29 + 5 + 1 + 1 + 1 精彩帖子

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

板凳
wwang111 发表于 2014-12-3 12:57:05
  1. data test;
  2. length text $110;
  3. text='CCCCCBBBBBBBBAAAAAA';output;
  4. text='BBCCCAABBBAACCCCCC';output;
  5. text='ABCDABCD';output;
  6. text='AABBCC';output;
  7. run;

  8. data wanted;
  9. set test;
  10. i=1;
  11. length text1 $110;
  12. retain text1;
  13. do until(substr(text,i,1)='');
  14. if text ne lag(text) then call missing(text1);
  15. if substr(text,i,1) ne substr(text,i+1,1) then text1=strip(text1)||strip(substr(text,i,1));
  16. i+1;
  17. end;
  18. drop i;
  19. run;
复制代码

已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
firefox29 + 1 + 1 + 1 + 1 精彩帖子

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

报纸
jingju11 发表于 2014-12-3 13:21:41
if counting blank space: jingju
  1. data have;
  2. x ='oops    soooo-full';
  3. z =substr(x,1,1); k=1;
  4. do i =2 to length(x);
  5.         if substr(x,i-1,1) =substr(x,i,1) then continue;
  6.         k ++1;
  7.         substr(z,k,1)=substr(x,i,1);
  8. end;
  9. put x "--->" z;
  10. run;
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
firefox29 + 1 + 1 + 1 精彩帖子

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

地板
teqel 发表于 2014-12-3 13:42:44
jingju11 发表于 2014-12-3 13:21
if counting blank space: jingju
学习了

7
hopewell 发表于 2014-12-3 13:51:00
  1. data _null_;
  2.     input value $20.;
  3.     new_value=prxchange('s/(\w|\s)\1+/$1/',-1,value);
  4.     put value '--> ' new_value;
  5. cards;
  6. cccccccbbbbbaaaa
  7. ggggdddwwww
  8. bbccaaccbbaa
  9. ccggbbbcccgggg
  10. oops    soooo-full
  11. ;
复制代码
已有 2 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
sniperhgy + 5 + 1 + 1 + 1 犀利的正则表达式。
firefox29 + 1 + 1 + 1 精彩帖子

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

8
bobguy 发表于 2014-12-4 11:05:11
jingju11 发表于 2014-12-3 13:21
if counting blank space: jingju
Using Char function in this case could save 30% cpu time.

128      data _null_;
129      x ='oops    soooo-full';
130      z =substr(x,1,1);
131      do _i_=1 to 5e5;
132       k=1;
133      do i =2 to length(x);
134              if substr(x,i-1,1) =substr(x,i,1) then continue;
135              k ++1;
136              substr(z,k,1)=substr(x,i,1);
137      end;
138      end;
139      put x "--->" z;
140      run;

oops    soooo-full --->ops so-ful
NOTE: DATA statement used (Total process time):
      real time           1.27 seconds
      cpu time            1.26 seconds


141
142      data _null_;
143      x ='oops    soooo-full';
144      z =substr(x,1,1);
145      do _i_=1 to 5e5;
146       k=1;
147      do i =2 to length(x);
148              if char(x,i-1) =char(x,i) then continue;
149              k ++1;
150              substr(z,k,1)=char(x,i);
151      end;
152      end;
153      put x "--->" z;
154      run;

oops    soooo-full --->ops so-ful
NOTE: DATA statement used (Total process time):
      real time           0.95 seconds
      cpu time            0.93 seconds
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
firefox29 + 1 + 1 + 1 精彩帖子

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

9
jingju11 发表于 2014-12-4 11:23:34
bobguy 发表于 2014-12-4 11:05
Using Char function in this case could save 30% cpu time.

128      data _null_;
Thanks. Bobguy and Hopewell both master SAS very well. JingJu

10
teqel 发表于 2014-12-4 11:34:58 来自手机
有众大神保佑,我们就安心了:)

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-2 08:24