【问题标题】:Add values of column2 to the right of a row by matching column1 values通过匹配第 1 列的值,将第 2 列的值添加到行的右侧
【发布时间】:2022-07-13 22:41:05
【问题描述】:

我有一个数据集,其中有多个后续条目,column1 的值重复,column2 的值不同。

像这样的东西:

column1 column2
1 1
1 2
1 3
2 1
2 2
2 3

我想要的输出如下:

column1 column2_1 column2_2 column2_3
1 1 2 3
2 1 2 3

我当前的解决方案使用 RETAIN 和 BY 组连接 column2 的不同值,然后使用 scan() 将它们分成各自的列,我从 HEREHERE 中提取。

我想知道,有没有更优雅(或者甚至更好,内置?)以这种方式组合行的方法?

谢谢你。

  • 不知道我明白你在问什么。您提供的第一个链接显示了两种简单的方法。一个使用带有 ARRAY 的数据步骤,另一个使用“内置”过程 PROC TRANSPOSE。

标签: sas


【解决方案1】:

绝对是proc transpose

data have;
  input column1 column2;
  cards;
1   1
1   2
1   3
2   1
2   2
2   3
;
run;

proc transpose data=have out=want prefix=column2_;
  by column1;
  var column2;
run;

此过程旨在转置数据。
但是,如果您坚持在数据步骤中执行此操作。数组方法是排序 优雅的,我想。

data want;
  i=0;
  do until(last.column1);
    set have;
    i+1;
    array column2_[3];
    by column1;
    column2_[i]=column2;
  end;
run;

您可能需要用宏变量替换数字3 以使此技能可移植。

【讨论】:

  • 不需要自己增加我。只需使用do i=1 by 1 until(last.column1);
  • @Tom Tom,太棒了。
猜你喜欢
  • 1970-01-01
  • 2015-11-30
  • 1970-01-01
  • 2015-11-04
  • 2022-12-09
  • 1970-01-01
  • 1970-01-01
  • 2022-07-06
  • 1970-01-01
相关资源
最近更新 更多