SAS笔记(8) 利用数组重构SAS数据集

时间:2022-03-12 10:18:38

在实际应用中,我们经常会把宽数据(一个患者一条观测)转化为长数据(一个患者多条观测)或者将长数据(一个患者多条观测)转换为宽数据(一个患者一条观测),在R中我们可以利用Reshape2包来实现。在SAS中有两种实现方法:数组和TRANSPOSE。这一篇博文先讲解利用数组重构SAS数据,下一篇博文将介绍利用TRANSPOSE函数重构SAS数据。

1.宽数据变长数据

***创建数据集
DATA DIAGNOSE;
   INPUT @1  PATNO    2.
         @3  DATE     MMDDYY10. 
         @14 DX1 - DX3;
   FORMAT DATE MMDDYY10.;
DATALINES;
10/21/1999 1 2 .
10/29/1999 2 . .
11/11/2000 3 . .
01/01/2000 1 2 3
02/02/2000 3 2 .
03/15/2000 4 . .
;

***将宽数据转化为长数据,不利用数组
DATA NEW_DX;
   SET DIAGNOSE (DROP = DATE);

   DX = DX1;
   IF DX NE . THEN OUTPUT;
   DX = DX2;
   IF DX NE . THEN OUTPUT;
   DX = DX3;
   IF DX NE . THEN OUTPUT;

   KEEP PATNO DX;
RUN;

***将宽数据转化为长数据,利用数组
DATA NEW_DX;
   SET DIAGNOSE (DROP = DATE);
   ARRAY DXARRAY[3] DX1 - DX3;

   DO I = 1 TO 3;
      DX = DXARRAY[I];
      IF DX NE . THEN OUTPUT;
   END;

   KEEP PATNO DX;
RUN;

2.将长数据转化为宽数据

参考资料:《Longitudinal Data and SAS: A Programmer's Guide》