SAS:如何用逗号分开并转置?

时间:2019-02-26 10:07:12

标签: sas

我正在使用SAS Enterprise Guide。 我有一个新文件,并被要求生成输出。 来源:

Name    feeder_in    feeder_out   NickName
ABBA    1,2          A,B           ABBA
POLA    1,2          C,D,E         CONS POLA

和欲望输出:

Name             feeder_final    
ABBA              1                
ABBA              2                 
ABBA              A
ABBA              B
POLA              1                 
POLA              2
CONS POLA         C
CONS POLA         D
CONS POLA         E

我一直在努力地解决这个问题,但是一点也没有运气。 我尝试过

data test;
catequipment=catx(',',strip(feeder_in),strip(feeder_out));
    do i=1 to countw(catequipment,',');

catequipment=catx(',',strip(feeder_in),strip(feeder_out));
    do i=1 to countw(catequipment,',');
output;
end;

xequipment=newequipment;

run;

有人对此有线索吗?

2 个答案:

答案 0 :(得分:0)

根据所需的输出,这是我对您的要求的理解:您希望输出对NAMEFEEDER_IN的每种组合有一个观察值,对{{1 }}和NICKNAME

在此假设下,代码看起来像(未经测试):

FEEDER_OUT

答案 1 :(得分:0)

转置多列时,您可能还希望维护源行和列标识符,以进行进一步的下游分析。如果您需要在类别形式的序列位置上进行成对连接,例如需要匹配第1行中的1A 2B和第1C行中的1C 2D,则 csv 中值的顺序也可能很重要。 2。

data have;
length name feeder_in feeder_out nickname $20;
input 
Name&   feeder_in&  feeder_out&  NickName&; datalines;
ABBA    1,2          A,B           ABBA
POLA    1,2          C,D,E         CONS POLA
run;

data want;
  _row_ + 1;

  set have;

  feeder = 'in ';
  do seq = 1 to countw(feeder_in,',');
    value = scan(feeder_in,seq,',');
    OUTPUT;
  end;

  feeder = 'out';
  do seq = 1 to countw(feeder_out,',');
    value = scan(feeder_out,seq,',');
    OUTPUT;
  end;

  keep _row_ Name feeder seq value NickName;
run;