楼主: advil
3241 9

【紧急求助】去掉连续字符 [推广有奖]

  • 1关注
  • 0粉丝

大专生

1%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
397 点
帖子
40
精华
0
在线时间
31 小时
注册时间
2008-2-28
最后登录
2015-11-7

楼主
advil 发表于 2011-8-12 17:22:51 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
大侠们:
      现有一个去掉连续分割符的问题,是否有SAS函数可以解决?
      问题描述:字段aa的值为“、、、中国、、人民、、、”
      实现目标:使用函数清洗为:“中国、人民”(即去掉头尾连续的顿号,将中间连续的顿号只保留一个)

     提示:貌似正则表达式可以完成,我调试了很久都不正确,哪位大侠能帮忙解决?多谢多谢!

我的QQ:215302868

二维码

扫码加我 拉你入群

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

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

关键词:紧急求助 急求助 正则表达式 SAS函数 表达式 表达式 中国 清洗

沙发
ntsean 发表于 2011-8-13 07:12:18
可以先用 translate 把 顿号转化为空格, y=translate(x,' ','、')
然后 y=compbl(y) 把中间的连续空格转为一个
最后转回去 y=translate(strip(y), ‘、',' ')
当然,如果原字符有空格那么可能麻烦点
已有 1 人评分经验 收起 理由
crackman + 100 热心帮助其他会员

总评分: 经验 + 100   查看全部评分

藤椅
advil 发表于 2011-8-13 10:21:25
多谢多谢,楼主厉害!解决了我的问题。
另外还有一个问题,是否能找出字符串中最后一个或者指定出现次数的字符的位置?
例如:深圳科技公司东莞分公司
我想找最后一个“公司”在字符串中出现的位置。

板凳
ntsean 发表于 2011-8-13 10:25:08
你可以先把字符反过来,再index 司公

报纸
guoluo 发表于 2011-8-13 17:52:25
找最后一个可以直接用find(var,'公司',-1)
找制定次数的可以用call prxsubstr
x=prxparse('/公司/');
call prxsubstr(x,var,start,length);
已有 1 人评分经验 收起 理由
crackman + 100 热心帮助其他会员

总评分: 经验 + 100   查看全部评分

地板
guoluo 发表于 2011-8-13 18:46:12
汗,更正一下,找指定次数可以用
  1. %LET N = 3;

  2. DATA TEST;
  3.   X = 'ABCDEFABCRTSABC ';
  4.   START = 1;
  5.   DO I = 1 TO &N;
  6.     POS = FIND(X,'ABC',START);
  7.     START = POS + 3;
  8.   END;
  9.   KEEP X POS;
  10. RUN;
复制代码
已有 1 人评分学术水平 热心指数 收起 理由
jingju11 + 1 + 1 DO I = 1 TO &N while(pos ^=0);*不知道所.

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

7
advil 发表于 2011-8-14 08:47:15
guoluo 发表于 2011-8-13 18:46
汗,更正一下,找指定次数可以用
谢谢guoluo,看你的代码觉得神清气爽。

8
advil 发表于 2011-8-14 08:52:00
guoluo 发表于 2011-8-13 17:52
找最后一个可以直接用find(var,'公司',-1)
找制定次数的可以用call prxsubstr
x=prxparse('/公司/');
哥哥,我找最后一个字符,用find调试了一下发现不行啊。

9
ntsean 发表于 2011-8-14 10:07:12
advil 发表于 2011-8-14 08:52
哥哥,我找最后一个字符,用find调试了一下发现不行啊。
最后一个,可以试试
就是你先把字符反过来, 把你找的字符也反过来,然后 找出,反过来后的字符第一次出现的位置,这个用index就可以了,然后通过两个字符的长度,算出你需要的位置,给个例子把

data a;
x='abcdbccbbdefbcg';
find='bc';
position=length(x)-index(reverse(strip(x)),reverse(strip(find)))-length(find)+2;
run;

这个字符是x, 要找的是 find='bc' 在x出现的最后一次的位置,position就是算出来的结果

10
guoluo 发表于 2011-8-15 19:18:03
advil 发表于 2011-8-14 08:52
哥哥,我找最后一个字符,用find调试了一下发现不行啊。
不好意思,find(var,'公司',-999)或者find(var,'公司',-length(var))

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

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