SAS如何根据一个字符串将一个观察分成多行?

SAS How to split an observation into multiple rows according to a string?

这是我的问题。

我得到了以下数据集

obs ID      p1  p2  p3  p4  perc
1   120265  .   .   .   25  a t 90%, b r 10%
2   120267  15  15  15  15  c e 80%, a 20%  
3   120269  20  20  20  20  cc  

我想这样归一化

obs ID      p1  p2  p3  p4  perc
1   120265  .   .   .   25  a t 90% 
2   120265  .   .   .   25  b r 10%
3   120267  15  15  15  15  c e 80%
4   120267  15  15  15  15  a 20%   
5   120269  20  20  20  20  cc

我很高兴听到一些建议! 我可以在多个列中进行 perc,但我不知道如何规范化数据集! 我很高兴收到一些提示。

我有一段时间没有用 SAS 编写代码了,但这似乎工作正常:

data have;
    length ID  p1  p2  p3  p4  list 0;
    infile cards dsd dlm='|' truncover;
    input ID p1 p2 p3 p4 list;
    cards;
120265|.|.|.|25|a t 90%, b r 10%
120267|15|15|15|15|c e 80%, a 20%
120269|20|20|20|20|cc
;

data col2rows;
    set have;
    length perc ;

    do i=1 by 1 until (perc=' ');
        perc=strip(scan(list, i, ','));

        if perc ne ' ' then
            output;
    end;
run;

data want;
    set col2rows (drop=list i);
run;

按预期打印: