SAS中文论坛

标题: 如果从一字符串中提取数字和日期? [打印本页]

作者: shiyiming    时间: 2011-8-23 17:21
标题: 如果从一字符串中提取数字和日期?
我要从一个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好像也不行,请大虾们指教!
作者: shiyiming    时间: 2011-8-23 21:29
标题: 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]
作者: shiyiming    时间: 2011-8-24 13:55
标题: Re: 如果从一字符串中提取数字和日期?
收了。

byes大侠一出现,天下无敌。 <!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->
作者: shiyiming    时间: 2011-9-20 09:59
标题: Re: 如果从一字符串中提取数字和日期?
谢谢大虾,休假去了,刚刚回来。

原来scan还能这样用,scan里的2是什么意思啊?有的company_description直接就是这样的:CCC INC(15-Apr-2015),这种情况下coupon是0,这样的就会有问题啊。
作者: shiyiming    时间: 2011-9-20 14:20
标题: 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]
作者: shiyiming    时间: 2011-9-20 16:59
标题: 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,有啥别的办法?




欢迎光临 SAS中文论坛 (http://mysas.net/forum/) Powered by Discuz! X3.2