SAS:将数据集从行转换为列

时间:2017-03-03 14:11:56

标签: sas

我有一个SAS数据集,其中每一行代表医生与某人ID的联系。每个ID具有不同数量的联系人(即行)。我的数据集如下所示。

enter image description here

我想要做的是最终得到一个看起来像

的数据集

enter image description here

这是我希望拥有数据集的每个唯一ID,我在其中为每个联系人号码(NUMBER)创建列,以及该联系人的类型(CONTACT_TYPE),并且应根据联系人的数量命名列。我还希望代码能够根据具有最大联系人数(MAX)的ID自动创建列,即NUMBER& MAX应该是我的最后一列。

我试图以某种方式将NUMBER转换为宏变量'Name'然后尝试某种方式

%让name = NUM​​BER

然后在datastep中使用它来执行类似

的操作

NUMBER&安培;名称。 = CONTACT_TYPE

在数据步骤中。然而,这对我来说并不起作用,而且我怀疑它很可能非常低效。

有人能指出我正确的方向来解决这个问题吗?

提前感谢您的时间。

问候亚历山大

2 个答案:

答案 0 :(得分:2)

这类问题正是PROC TRANSPOSE旨在处理的问题。

proc transpose data=have out=want prefix=NUMBER ;
  by id;
  id number ;
  var contact_type;
run;

答案 1 :(得分:1)

这是通过PROC TRANSPOSE完成的。

首先,让我们创建一个包含新列名的列。

data temp;
set have;
_name_ = catt("NUMBER",number);
run;

对数据进行排序(如果尚未排序)。如果数据已排序,则跳过。

proc sort data=temp;
by id number;
run;

然后运行转置

proc transpose data=temp out=want;
by id;
var CONTACT_TYPE;
id _NAME_;
run;