我想转置数据集,但SAS坚持要添加新列,如果是“by”列 有多个条目。
所以如果我跑
data test;
input a b $ c $ ;
datalines;
1 aaa bbb
1 bbb bbb
2 ccc ccc
3 ccc ccc
;
run;
proc transpose data=test;
by a;
var b b;
run;
我得到一个包含两列的表,如下所示:
1 b aaa bbb
1 c bbb bbb
2 b ccc
2 c ccc
3 b ccc
3 c ccc
我希望看到这样的表格:
1 b aaa
1 c bbb
1 b bbb
1 c bbb
2 b ccc
2 c ccc
3 b ccc
3 c ccc
因此,我希望SAS不添加列,而是为每个条目添加行。关于如何做到这一点的任何想法?
为了清楚起见,这是一个玩具的例子!我正在使用的数据集有更多列。
答案 0 :(得分:4)
这应该有效(使用你的示例代码):
proc transpose data=test out=test_tran1(rename=(_name_ = old_var));
by a;
var b c;
run;
proc transpose data=test_tran1 out=test_tran2(drop=_: rename = (col1=values) where = (not missing(values)));
by a old_var;
var col:;
run;
答案 1 :(得分:2)
您不能在“混合”数据集(每组多个行和多个列)的一个步骤中使用PROC TRANSPOSE来获得更长的时间。转置只对所有这些都很有效。
最简单的获取方式通常是数据步骤。
data want;
set test;
array vars b c;
do _i = 1 to dim(vars);
varname = vname(vars[_i]);
value = vars[_i];
output;
end;
keep a varname value;
run;
答案 2 :(得分:0)
data output;
set test;
array vars {*} b -- c; * define array composed of list of variables from B to C, have to be of same type;
length varname $32;
keep a varname value;
do i=1 to dim(vars);* loop array (list of variables);
varname= vname(vars(i));* get name of variable that provided value;
value = vars(i);* get the value of variable;
output; *output row;
end;
run;