在 SAS 中将宽转换为长,无需额外的列 [英] Transposing wide to long in SAS, without extra columns
本文介绍了在 SAS 中将宽转换为长,无需额外的列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想转置一个数据集,但 SAS 坚持添加一个新列,如果by"列有多个条目.
I'd like to transpose a dataset, but SAS insists on adding a new column, if the "by" column has multiple entries.
所以如果我跑
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;
我得到一个包含两列的表格,如下所示:
I get a table with two columns that looks like this:
1 b aaa bbb
1 c bbb bbb
2 b ccc
2 c ccc
3 b ccc
3 c ccc
我想要一个看起来像这样的桌子:
What I'd like with a table that looks like this:
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 为每个条目添加行,而不是添加列.关于如何做到这一点的任何想法?
So instead of adding columns, for each entry, I want SAS to add rows. Any ideas on how to do this?
需要说明的是,这是一个玩具示例!我正在处理的数据集包含更多列.
Just to be clear, this is a toy example! The dataset I'm working with has more columns.
推荐答案
这应该可行(使用您的示例代码):
This ought to work (using your example code):
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;
这篇关于在 SAS 中将宽转换为长,无需额外的列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文