楼主: 040108020007
25084 13

SAS截取字符串的方法 [推广有奖]

  • 0关注
  • 0粉丝

已卖:1份资源

讲师

12%

还不是VIP/贵宾

-

威望
0
论坛币
3437 个
通用积分
2.2500
学术水平
0 点
热心指数
1 点
信用等级
0 点
经验
7488 点
帖子
210
精华
0
在线时间
602 小时
注册时间
2007-6-25
最后登录
2025-11-27

楼主
040108020007 发表于 2011-3-1 17:14:17 |AI写论文
20论坛币
我有一个网址(数据导入后变成一个变量)“www.cnblogs.com/jstwt/admin/EditPosts.aspx?opt=1”,想以“/”为分隔符截取他们之间的内容,“jstwt”,“admin”,“EditPosts”,把他们命名为别的变量。现在知道substr可以截取字符串;find和index函数可以查找,但只能找第一次出现的位置,这样后面的"/"如何识别;哪位高手能指点一下。给个函数,或者处理方法都行,不胜感激!

最佳答案

soporaeternus 查看完整内容

函数scan 我觉得难点是变量个数不定......
关键词:字符串 SUBSTR admin Index Blogs SAS 字符

本帖被以下文库推荐

沙发
soporaeternus 发表于 2011-3-1 17:14:18
函数scan
我觉得难点是变量个数不定......
Let them be hard, but never unjust

藤椅
webgu 发表于 2011-3-1 18:59:39
soporaeternus 发表于 2011-3-1 17:30
函数scan
我觉得难点是变量个数不定......
用DO WHILE 循环吧!

板凳
webgu 发表于 2011-3-1 19:29:39
  1. data  tset1;
  2. infile datalines ;
  3. length a $ 100;
  4. input id $ a $;
  5. datalines;
  6. 001  jstwt/admin/EditPosts   
  7. 002  dfsdf/sfsf/sfsfweef/wfwef
  8. ;
  9. run;

  10. data tset2(drop=i va);
  11. set tset1(rename=(a=va));
  12. i=1;
  13. do while (scan(va,i,"/")^="");
  14.    a=scan(va,i,"/");
  15.    output;
  16.    i+1;
  17. end;
  18. run;

  19. proc transpose data=tset2 out=final(drop=_name_) prefix=a;
  20.   by id;
  21.   var a;
  22. run;
复制代码
也许可以。
已有 2 人评分学术水平 热心指数 收起 理由
040108020007 + 1 + 1 观点有启发
论坛数据分析 + 1 好的意见建议

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

报纸
guoluo 发表于 2011-3-2 10:41:38
  1. data test;
  2.   string = "www.cnblogs.com/jstwt/admin/EditPosts.aspx?opt=1";
  3.   del_num = count(string,'/');
  4.   array sub(*) $20 sub1-sub10;
  5.   do i = 1 to del_num+1;
  6.     sub(i) = scan(string,i,'/');
  7.   end;
  8. run;
复制代码
已有 1 人评分学术水平 热心指数 收起 理由
040108020007 + 1 + 1 精彩帖子

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

地板
webgu 发表于 2011-3-2 14:48:05
5# guoluo
数组元素个数不确定,超个10个时,就崩了。

7
soporaeternus 发表于 2011-3-2 15:09:16
4# webgu
行转列不失为获得(最大)变量数的一个方法
但是少数分隔符特别多的字符串将导致多数记录很多变量的缺失,导致空间的浪费......
不知道有没有其他办法啊,有种方法是将这些截取后的字符放成XML对象,不知道SAS有没有类似方法......
Let them be hard, but never unjust

8
guoluo 发表于 2011-3-2 15:10:58
楼上说的没错,不过就这个问题而言这样足够了,URL层数来说10已经够大了

9
040108020007 发表于 2011-3-2 22:30:10
嗯,就是用scan函数,已经解决了,scan的第二个参数不是可用选从第几个分隔符开始截取么,就是scan(x,2,“/”)就可以了 2# soporaeternus

10
webgu 发表于 2011-3-6 13:56:01
guoluo 发表于 2011-3-2 10:41
  1. data test;
  2.   string = "www.cnblogs.com/jstwt/admin/EditPosts.aspx?opt=1";
  3.   del_num = count(string,'/');
  4.   array sub(*) $20 sub1-sub10;
  5.   do i = 1 to del_num+1;
  6.     sub(i) = scan(string,i,'/');
  7.   end;
  8. run;
复制代码
不知用宏能否解决变量个数不定的问题

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

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