n******9 发帖数: 26 | 1 原数据如下:
id a b c
1 0 0 0
1 1 1 0
1 1 1 1
2 0 0 0
2 0 0 0
。。。
想把以上数据转换成
id type response
1 a 0
1 b 0
1 c 0
1 a 1
1 b 1
1 c 0
1 a 1
1 b 1
1 c 1
2 a 0
2 b 0
2 c 0
2 a 0
2 b 0
2 c 1
。。。
原本以为可以用PROC TRANSPOSE 来做转换,可是总也不能转换成我想要的样子。 肯请
大侠们帮我看看,到底能不能用SAS完成转换。
万分感谢! |
A*******s 发帖数: 3942 | 2 我看了一下by statement的sas help document,原来
The maximum number of observations in any BY group in the input data set is
two;
所以我能想到的变通方法是
data test;
input id a b c;
cards;
1 0 0 0
1 1 1 0
1 1 1 1
2 0 0 0
2 0 0 0
;
run;
data test;
set test;
row=_N_;
run;
proc transpose data=test out=out(drop=row rename=(_Name_=type col1=response)
);
by row id;
proc print;
run;
Obs id type response
【在 n******9 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 原数据如下: : id a b c : 1 0 0 0 : 1 1 1 0 : 1 1 1 1 : 2 0 0 0 : 2 0 0 0 : 。。。 : 想把以上数据转换成 : id type response
|
f*******e 发帖数: 51 | 3 不用transpose
data test;
input id a b c;
cards;
1 0 0 0
1 1 1 0
1 1 1 1
2 0 0 0
2 0 0 0
;
run;
data test;
set test;
type="a"; response=a; output;
type="b"; response=b; output;
type="c"; response=c; output;
keep id type response;
run;
【在 n******9 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 原数据如下: : id a b c : 1 0 0 0 : 1 1 1 0 : 1 1 1 1 : 2 0 0 0 : 2 0 0 0 : 。。。 : 想把以上数据转换成 : id type response
|
d*******o 发帖数: 493 | 4 data one;
input id @;
do i=1 to 3;
if i=1 then type='a';
if i=2 then type='b';
if i=3 then type='c';
input response @;
drop i;
output;
end;
cards;
1 0 0 0
1 1 1 0
1 1 1 1
2 0 0 0
2 0 0 0
;
run; |
n******9 发帖数: 26 | 5 Thank you so much! Baozi gan xie. |
S******y 发帖数: 1123 | 6 # in case you would like to do it in Python :-)
in_file = 'C:\\to_tranx.txt'
f = open(in_file, 'r')
print 'id','type', 'response'
for line in f:
xid, xa, xb, xc = line.split()
print xid, 'a', xa
print xid, 'b', xb
print xid, 'c', xc |