Sas 转置逗号分隔字段

Sas 转置逗号分隔字段,sas,Sas,我有一个类似这样的数据集,我正在使用SAS Enterprise Guide 6.3: data have; input id state $; cards; 134 NC,NY,SC 145 AL,NC,NY,SC ; run; 我有另一个数据集,每个州的每个id都有几个度量,但我只需要提取have数据集第二列中列出的州的数据 data complete; input id state $ metric; cards; 134 AL 5 134 NC 4.3 134

我有一个类似这样的数据集,我正在使用SAS Enterprise Guide 6.3:

data have;
    input id state $;
    cards;
134 NC,NY,SC
145 AL,NC,NY,SC
;
run;
我有另一个数据集,每个州的每个id都有几个度量,但我只需要提取have数据集第二列中列出的州的数据

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 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;
或者,您可以
扫描
第一个状态代码

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

SCAN
的功能等同于读取带分隔符的文件。

6.3意味着6.1和9.3?还是别的什么?(我熟悉的版本是4.1、4.3、5.1、6.1、7.1,除非有我从未听说过的较小版本?)是的,6.1对不起。谢谢
data want_to_merge;
  set have;
  state_first = scan(state,1,',');  
run;