SAS中的数据堆叠

时间:2012-04-02 19:43:23

标签: distribution sas

我想堆叠这种类型的数据集:

PATIENT_ID  AA BB CC DD EE  
1           22 33 44 55 66  
2           77 88 99 10 11  
...         .. .. .. .. .. 

进入以下内容:

 PATIENT_ID GROUP VALUE  
 1          AA    22  
 1          BB    33  
 1          CC    44  
 1          DD    55  
 1          EE    66  
 2          AA    77  
 2          BB    88  
 2          CC    99  
 2          DD    10  
 2          EE    11  
 ...        ..    ..

检查所有组的正常性,因为它们是依赖/链接的。

如何在SAS中进行堆叠?谢谢。

2 个答案:

答案 0 :(得分:5)

使用proc transpose

data pats;
    input PATIENT_ID  AA BB CC DD EE;
    cards;
1 22 33 44 55 66  
2 77 88 99 10 11
;
run;

proc transpose data=pats out=pats_long;
    by patient_id;
run;

答案 1 :(得分:4)

正如@itzy所示,proc transpose是为这些类型的数据重构任务创建的,可能就是你想要使用的。

为了完整性,我将展示如何仅使用数据步骤通过更手动的方法获得相同的结果。

data short;
    input PATIENT_ID  AA BB CC DD EE;
    cards;
1 22 33 44 55 66  
2 77 88 99 10 11
;
run;

data long(keep= PATIENT_ID GROUP VALUE);
  set short;
  array vars(*) AA--EE;
  do i=1 to dim(vars);
    GROUP=vname(vars(i));
    VALUE=vars(i);
    output;
  end;
run;

proc print data=long noobs;run;