我有一个SAS数据集,其中每一行代表医生与某人ID的联系。每个ID具有不同数量的联系人(即行)。我的数据集如下所示。
我想要做的是最终得到一个看起来像
的数据集这是我希望拥有数据集的每个唯一ID,我在其中为每个联系人号码(NUMBER)创建列,以及该联系人的类型(CONTACT_TYPE),并且应根据联系人的数量命名列。我还希望代码能够根据具有最大联系人数(MAX)的ID自动创建列,即NUMBER& MAX应该是我的最后一列。
我试图以某种方式将NUMBER转换为宏变量'Name'然后尝试某种方式
%让name = NUMBER
然后在datastep中使用它来执行类似
的操作NUMBER&安培;名称。 = CONTACT_TYPE
在数据步骤中。然而,这对我来说并不起作用,而且我怀疑它很可能非常低效。
有人能指出我正确的方向来解决这个问题吗?
提前感谢您的时间。
问候亚历山大
答案 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;