在SAS中拆分具有多个分隔符的字符串

时间:2015-04-03 07:17:22

标签: sas

如何将以下字符串(多个分隔符)拆分为SAS中的单独列?

  

[截获] -2 [/截获] [国家]我的[/ ​​COUNTRY]   [LOG_AMT] 0.2354 [/ LOG_AMT] [BETAX] -11.08325 [/ BETAX]

> INTERCEPT  COUNTRY   LOG_AMT     BETAX
> -2           MY       0.2354    -11.08325

1 个答案:

答案 0 :(得分:2)

这样做的简单方法是使用@@和分隔符作为' ['来生成密钥值对。使用proc转置生成键值对后,您可以生成完全相同的结果。这样,如果将来添加更多的属性 - 值对,代码仍然能够完美地生成结果。请查看以下代码。

data have;
length key value $ 20.;
retain key ' ';
retain group 1;
infile datalines dlm=']' ;
    input text :$char20. @@;
    key=lag(text);
    if find(text,'[/') then do;
        key=scan(key,2,'[','mo');
        value=scan(text,1,'[');
        output;
    end;
    drop text;
datalines;
[INTERCEPT]-2[/INTERCEPT] [COUNTRY]MY[/COUNTRY] [LOG_AMT]0.2354[/LOG_AMT] [BETAX]-11.08325[/BETAX]
;;;;
run;
proc transpose data=have out=want(drop=group _name_);
    by group;
    var value;
    id key;
    idlabel key;
run;
proc print data=want;run;

就个人而言,我更喜欢使用sas perl正则表达式来破坏键值对中的属性/值。您也可以将属性/值分解为键值对。