在 SAS 中将宽转换为长,无需额外的列 [英] Transposing wide to long in SAS, without extra columns

查看:57
本文介绍了在 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆