为了账号安全,请及时绑定邮箱和手机立即绑定

如何为 sas 中的每一行分组 50 列并为其值创建一个新列?

如何为 sas 中的每一行分组 50 列并为其值创建一个新列?

月关宝盒 2021-09-01 19:18:52
我有 50 个分类列,其中包含数字和 1 个单独的列用于唯一标识符和 100 行。我想从中创建一个新的数据集,它有 3 列: Column1 用于唯一标识符;Column2 用于为每行分组的分类列;和, Column3 为数值。目前,我有这个:ID  Column1 Column2..........Column 50--- ------- -------          ---------A     23      40                90B     50      7                 79C     0       9                 4我要这个,ID   GroupedColumn   Value---   -----------    ----- A      Column1        23        Column2        40          .         .      Column50       90B      Column1        50       Column2        7       .       .      Column50       79C     Column1        0      Column2        0       .        .      Column50       4
查看完整描述

3 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

只需使用 PROC TRANSPOSE。


proc transpose data=have out=want ;

  by id;

run;

自动变量_NAME_将具有原始变量名称,而值将位于名为 的变量中COL1。您可以使用 PROC TRANSPOSE 语句上的选项来更改默认名称。


proc transpose name=GroupedColumn prefix=Value out=want;

请注意,名称仍会1附加到每个 ID 的第一次观察中。如果每个 ID 有多个观察值,那么您还将获得 VALUE2、VALUE3 等。


或者使用rename=输出数据集上的dataset 选项来更改新变量的名称。


proc transpose name=GroupedColumn out=want(rename=(col1=Value));


查看完整回答
反对 回复 2021-09-01
?
富国沪深

TA贡献1790条经验 获得超9个赞

如果您愿意使用一个小技巧,您可以重新标记名称角色变量。


proc transpose data=sashelp.class out=test;

   by name;

   var _all_;

   attrib _name_: label='This is how';

   run;

//img1.sycdn.imooc.com//612f622200019caa02460144.jpg

查看完整回答
反对 回复 2021-09-01
?
BIG阳

TA贡献1859条经验 获得超6个赞

Proc transpose 或许可以帮到你。


查看完整回答
反对 回复 2021-09-01
  • 3 回答
  • 0 关注
  • 324 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信