SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1049|回复: 5
打印 上一主题 下一主题

如果从一字符串中提取数字和日期?

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2011-8-23 17:21:26 | 只看该作者

如果从一字符串中提取数字和日期?

我要从一个variable里提取数字和日期,这个variable形式如下:

Company Description
A            American Airlines Inc (9.9% 15-Jan-2010)
B            Amr Corp (4.25% 23-Sep-2023)

我要实现的是:
Company  Name                                   Coupon   Maturity
A             American Airlines Inc              9.9       15Jan2010
B             Amr Corp                               4.25      23Sep2023

请问应该如何提取啊?因为前面的公司名称长度不一,没有办法用substr,scan好像也不行,请大虾们指教!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2011-8-23 21:29:44 | 只看该作者

Re: 如果从一字符串中提取数字和日期?

[code:2483i6mk]
data result;
        set a;
        length  Company_Name $50 Coupon 8 Maturity 8;
        format Maturity date9.;
        Company_Name=scan(Company_Description,1,'(%)');
        Coupon=scan(Company_Description,2,'(%)');
        Maturity=input(scan(Company_Description,3,'(%)'),date9.);
run;
[/code:2483i6mk]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2011-8-24 13:55:51 | 只看该作者

Re: 如果从一字符串中提取数字和日期?

收了。

byes大侠一出现,天下无敌。 <!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2011-9-20 09:59:43 | 只看该作者

Re: 如果从一字符串中提取数字和日期?

谢谢大虾,休假去了,刚刚回来。

原来scan还能这样用,scan里的2是什么意思啊?有的company_description直接就是这样的:CCC INC(15-Apr-2015),这种情况下coupon是0,这样的就会有问题啊。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2011-9-20 14:20:32 | 只看该作者

Re: 如果从一字符串中提取数字和日期?

[code:38jfoo1a]data test;
    str='SPAIN, KINGDOM OF GOVERNMENT 5&#46;75 30-JUL-2032';output;
    str='ASIF III JERSEY LTD 5&#46;75 26-SEP-2005';output;
    str='A American Airlines Inc (9&#46;9% 15-Jan-2010)';output;
    str='B Amr Corp (4&#46;25% 23-Sep-2023)';output;
    str='CCC INC(15-Apr-2015)';output;
run;
data test;
    set test;
    put '***' str '***';
    str=translate(str,' ','(',' ','%',' ',')');
    Maturity=input(scan(str,-1,' '),date11&#46;);
    if anyalpha(scan(str,-2,' '))=0 then do;
        Coupon=input(scan(str,-2,' '),best&#46;);
        call scan(str,-2,p,l,' ');
    end;
    else call scan(str,-1,p,l,' ');
    Company=substr(str,1,p-1);
    put company= /coupon= /maturity= date9&#46;/;
run;[/code:38jfoo1a]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2011-9-20 16:59:01 | 只看该作者

Re: 如果从一字符串中提取数字和日期?

哭,这个数据太不clean了。

company_description里面还有类似这样的“ASIF III JERSEY LTD 5.75 26-SEP-2005”“SPAIN, KINGDOM OF GOVERNMENT 5.75 30-JUL-2032”,用hope大侠的就没法读出来,应该是coupon=5.75 maturity=30JUL2032

另外,如何从一大串字符中找到我要的字符
比如:
company market
A            EUR I.G. CORP BOND (FIXED RATE)
B            BE DOM GOVT BOND (FIXED RATE)
C            USD PRIV. PLACEMT CORP BOND (FLOATING RA
D            USD N.I.G. A.B.S. (FIXED RATE)

从上面找到GOVT的和CORP的,如下:
company bondtype
A            CORP
B            GOVT
C            CORP
D            Others

这样的如何实现?谢谢!!!

PS,我尝试用了compress,但是如果名字很复杂,里面都含这些字母的话都会被compress,有啥别的办法?
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2025-5-7 21:55 , Processed in 0.088784 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表