在实际应用中,我们经常会把宽数据(一个患者一条观测)转化为长数据(一个患者多条观测)或者将长数据(一个患者多条观测)转换为宽数据(一个患者一条观测),在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.将长数据转化为宽数据