将一个字符串拆分为多行(SAS)

时间:2017-06-16 12:17:13

标签: sas

我试图在SAS中执行以下操作。

我有这样的数据集:

| F2                                  | F3     | PERIOD   |
___________________________________________________________
| Text1(1001) Text2(1002) Text3(1003) |        | 10-02-03 |
| Text4                               | 1004   | 10-02-08 |
| Text5(1005) Text6(1006)             |        | 10-02-12 |
| Text7                               | 1007   | 10-03-01 |

如果有多个值,我想要做的就是拆分F2列。所以数据集看起来像这样:

| F2                                  | F3     | Period   |
___________________________________________________________
| Text1                               | 1001   | 10-02-03 |
| Text2                               | 1002   | 10-02-03 |
| Text3                               | 1003   | 10-02-03 |
| Text4                               | 1004   | 10-02-08 |
| Text5                               | 1005   | 10-02-12 |
| Text6                               | 1006   | 10-02-12 |
| Text7                               | 1007   | 10-03-01 |

因此,括号中的值以F3列结束,PERIOD列保持不变。

我希望有人可以提供帮助。

1 个答案:

答案 0 :(得分:1)

第一个datastep模拟输入的前两行,第二行执行您需要的操作。

干杯,弗朗西斯科

data in;
 length f2 $64
        f3 $4
        period $8;
 f2="Text1(1001) Text2(1002) Text3(1003)";
 period="10-02-03";
 output;
 f2="Text4";
 f3="1004";
 period="10-02-08";
 output;
run;

data out;
 length outF2 $16;
 set in;

 noOfBlanks = countc(strip(f2),' ');

 if noOfBlanks then do i=1 to noOfBlanks+1;
    outF2=scan(f2,i," ");
    f3 = prxchange("s/.*\(|\)//",-1,outF2);
    outF2 = prxchange("s/\(.*\)//",-1,outF2);
    output;
 end;
 else do;
    outF2=f2;
    output;
 end;

 drop f2 noOfBlanks i;
 rename outF2 = f2;

run;