楼主: tjnkswordsman
2479 11

[问答] 请教:如何在一长文本中连续提取字符段? [推广有奖]

  • 17关注
  • 7粉丝

教授

52%

还不是VIP/贵宾

-

威望
0
论坛币
373734 个
通用积分
0.2302
学术水平
0 点
热心指数
1 点
信用等级
0 点
经验
624 点
帖子
851
精华
0
在线时间
1983 小时
注册时间
2008-4-4
最后登录
2021-3-16

楼主
tjnkswordsman 发表于 2013-8-18 19:51:18 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

一下是一个完整的文本,我需要将其时间字符段抽取出来。即抽取第6、第12、第18。。。位置上的字符段。
请教各位SASer如何解决这类方法?
谢谢!
周末愉快~

|||fund_it|||22.00%|||¥50.00|||¥0.00|||失败|||2012/3/2016:13:03|||
|||tzk7118|||22.00%|||¥50.00|||¥0.00|||失败|||2012/3/2020:09:02|||
|||zzy66916|||22.00%|||¥100.00|||¥0.00|||失败|||2012/3/214:33:02|||
|||spcmgl|||22.00%|||¥50.00|||¥0.00|||失败|||2012/3/261:18:56|||
|||ivangao|||22.00%|||¥1,800.00|||¥0.00|||失败|||2012/3/273:16:20|||
|||zg7632|||22.00%|||¥52.00|||¥0.00|||失败|||2012/3/276:48:02|||
|||yuechaoyan|||22.00%|||¥100.00|||¥0.00|||失败|||2012/3/2711:46:11|||
|||yuyong8384|||22.00%|||¥96.00|||¥0.00|||失败|||2012/3/2712:37:48|||
|||gxd20120121|||22.00%|||¥200.00|||¥0.00|||失败|||2012/3/2713:38:25|||
|||psdw|||22.00%|||¥200.00|||¥0.00|||失败|||2012/3/2715:25:20|||
二维码

扫码加我 拉你入群

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

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

关键词:saser Yong Fund Ivan und 如何

回帖推荐

yongyitian 发表于11楼  查看完整内容

想法很好,已用在了下面的程序中。

yongyitian 发表于8楼  查看完整内容

沙发
yangyiznu 发表于 2013-8-18 20:55:25
试着用EXCEL2007中的  数据---分列  功能,或者 用RIGHT函数,这个不复杂,犯不着用SAS

藤椅
tjnkswordsman 发表于 2013-8-18 23:13:33
yangyiznu 发表于 2013-8-18 20:55
试着用EXCEL2007中的  数据---分列  功能,或者 用RIGHT函数,这个不复杂,犯不着用SAS
嗯,谢谢您!
数据量很大,所以还想用SAS来着。
如果是百万条的数据,是否可以用 SAS 的scan函数来做?
但是不知道连续取字符段。

板凳
tjnkswordsman 发表于 2013-8-18 23:17:13
求大神帮助

报纸
yongyitian 发表于 2013-8-18 23:23:41
  1. /* try this code if you have a number of observations */

  2. data test;
  3. length longword $100.;
  4. input longword $;  
  5. datetime = scan(longword, 6, '|||');
  6. datalines;
  7. |||fund_it|||22.00%|||?50.00|||?0.00|||Fail|||2012/3/2016:13:03|||
  8. |||tzk7118|||22.00%|||?50.00|||?0.00|||Fail|||2012/3/2020:09:02|||
  9. |||zzy66916|||22.00%|||?100.00|||?0.00|||Fail|||2012/3/214:33:02|||
  10. |||spcmgl|||22.00%|||?50.00|||?0.00|||Fail|||2012/3/261:18:56|||
  11. |||ivangao|||22.00%|||?1,800.00|||?0.00|||Fail|||2012/3/273:16:20|||
  12. |||zg7632|||22.00%|||?52.00|||?0.00|||Fail|||2012/3/276:48:02|||
  13. |||yuechaoyan|||22.00%|||?100.00|||?0.00|||Fail|||2012/3/2711:46:11|||
  14. |||yuyong8384|||22.00%|||?96.00|||?0.00|||Fail|||2012/3/2712:37:48|||
  15. |||gxd20120121|||22.00%|||?200.00|||?0.00|||Fail|||2012/3/2713:38:25|||
  16. |||psdw|||22.00%|||?200.00|||?0.00|||Fail|||2012/3/2715:25:20|||
  17. ; run;
复制代码

地板
tjnkswordsman 发表于 2013-8-18 23:26:13
yongyitian 发表于 2013-8-18 23:23
谢谢您的答复,我先消化消化您的方法。
每一个观测都有一个很长的由|||连接符连接的文本,取其所有的时间字段。
大概有几十万条观测。
再次感谢,如有问题再向您请教。

7
tjnkswordsman 发表于 2013-8-18 23:44:16
yongyitian 发表于 2013-8-18 23:23
您好,我尝试了您的方法,可以采集到每个观测的第一个时间字段。
提问用的样本属于一个观测,学生的目标是采集每个观测里面的所有时间字段;
一共有几万条观测。
请问您有没有什么比较好的思路?

8
yongyitian 发表于 2013-8-19 00:06:03
  1. data test1;
  2.    length longword $1000.;
  3.    input longword $;  
  4.     i = 6;
  5.    do  until(position = 0);
  6.      call scan ( longword, i, position , length , "|||" );  
  7.      datetime = substrn (longword,  position ,   length );
  8.      output;
  9.      i+6;
  10.    end;
  11.     drop longword i position length;
  12. datalines;
  13. |||fund_it|||22.00%|||?50.00|||?0.00|||Fail|||2012/3/2016:13:03||||||tzk7118|||22.00%|||?50.00|||?0.00|||Fail|||2012/3/2020:09:02|||
  14. |||zzy66916|||22.00%|||?100.00|||?0.00|||Fail|||2012/3/214:33:02||||||spcmgl|||22.00%|||?50.00|||?0.00|||Fail|||2012/3/261:18:56||||||ivangao|||22.00%|||?1,800.00|||?0.00|||Fail|||2012/3/273:16:20|||
  15. |||zg7632|||22.00%|||?52.00|||?0.00|||Fail|||2012/3/276:48:02||||||yuechaoyan|||22.00%|||?100.00|||?0.00|||Fail|||2012/3/2711:46:11||||||yuyong8384|||22.00%|||?96.00|||?0.00|||Fail|||2012/3/2712:37:48||||||gxd20120121|||22.00%|||?200.00|||?0.00|||Fail|||2012/3/2713:38:25|||
  16. |||psdw|||22.00%|||?200.00|||?0.00|||Fail|||2012/3/2715:25:20|||
  17. ; run;
  18. data test1;
  19.    set test1;
  20.    if missing(datetime) then delete;
  21. run;
  22. proc print data=test1; title 'test1'; run;
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
boe + 1 + 1 + 1 分析的有道理

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

9
tjnkswordsman 发表于 2013-8-19 08:52:48
yongyitian 发表于 2013-8-19 00:06
        您好,我run了您的代码,效果很好。

       如何能在数据集中实现呢?目标变量是record,里面取了大约50个观测。

        谢谢!

a.xls
下载链接: https://bbs.pinggu.org/a-1386950.html

17.5 KB

数据集

10
tjnkswordsman 发表于 2013-8-19 09:03:26
yongyitian 发表于 2013-8-19 00:06
在本例中,时间字段有两个特点:位置连续依次出现在 6*n 的位置上;
它的字符数是最多的。

SAS有没有办法截取字符数超过SASer设定阀值的方法?

谢谢。比如:我们只采集以 ||| 为连接符的、字符数超过15的字符段。

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

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