转置逗号分隔的字段

时间:2014-12-08 17:29:56

标签: sas

我有一个看起来像这样的数据集,并且正在使用SAS Enterprise Guide 6.3:

data have;
    input id state $;
    cards;
134 NC,NY,SC
145 AL,NC,NY,SC
;
run;

我有另一个数据集,每个状态的每个id都有几个指标,但我只需要为has数据集的第二列中列出的状态提取数据。

data complete;
    input id state $ metric;
cards;
134 AL 5
134 NC 4.3
134 NY 4
134 SC 5.5
145 AL 1.3
145 NC 1.3
145 NY 1.5
145 SC 1.1
177 AL 10
177 NC 74
177 NY 23
177 SC 33
;
run;

我考虑使用trnwrd用','替换逗号并连接开头和结尾引用以使列表成为字符列表,这样我就可以使用WHERE IN语句。但是,我认为如果我能以某种方式将逗号分隔列表转换为这样的内容会更有帮助:

data have_mod;
        input id state $;
        cards;
    134 NC
    134 NY
    134 SC
    145 AL
    145 NC
    145 NY
    145 SC
    ;
    run;

然后我可以简单地将此表连接到完整的数据表以获得我需要的子集(下面)。

data want;
    input id state $ metric;
cards;
134 NC 4.3
134 NY 4
134 SC 5.5
145 AL 1.3
145 NC 1.3
145 NY 1.5
145 SC 1.1
;
run;  

有什么想法?感谢。

1 个答案:

答案 0 :(得分:3)

我会完全按照你的建议进行转置 - 除非我以这种方式阅读它。

data have;
    infile datalines truncover dlm=', ';
    length state $2;
    input id @;   *read in the id for that line;
        do until (state='');   *keep reading in until state is missing = EOL;
            input state $ @;
            if not missing(state) then output;
        end;
    cards;
134 NC,NY,SC
145 AL,NC,NY,SC
;
run;

或者,您可以SCAN获取第一个州代码。

data want_to_merge;
  set have;
  state_first = scan(state,1,',');  
run;

SCAN的功能相当于在分隔文件中读取。