SAS中的数据叠加

SAS中的数据叠加,sas,Sas,我正试图重新整理我的数据,但我有一个困难的时间。我拥有的数据如下所示: date a b c ==================== 1996 5 7 8 1997 4 2 3 1998 1 9 6 我想要的是重新排列数据(可能使用数组)以获得以下结果: date val var ============= 1996 5 a 1997 4 a 1998 1 a 1996 7 b 1997 2

我正试图重新整理我的数据,但我有一个困难的时间。我拥有的数据如下所示:

date    a    b   c
====================
1996    5    7   8
1997    4    2   3    
1998    1    9   6
我想要的是重新排列数据(可能使用数组)以获得以下结果:

date  val var
=============
1996  5   a
1997  4   a
1998  1   a
1996  7   b
1997  2   b
1998  9   b
1996  8   c
1997  3   c
1997  6   c
因此,我基本上已经将变量(a,b,c)与相应的日期和变量名称一起叠加


提前谢谢

使用PROC TRANSPOSE来透视数据

按日期第一次排序

proc sort data=have;
by date;
run;
然后使用转置

proc transpose data=have out=want(rename=(COL1=VAL _NAME_=VAR));
by date;
var a b c;
run;
最后,看起来您希望按VAR排序,然后按日期排序

proc sort data=want;
by VAR date;
run;

既然您提到了数组,下面介绍如何使用它们来获得结果。
然而,我会在@DomPazz的回答中使用
proc transpose
方法,因为程序通常更易于阅读和理解,其他人可能需要查看代码

/* create initial dataset */
data have;
input date a b c;
datalines;
1996    5    7   8
1997    4    2   3
1998    1    9   6
;
run;

/* transpose data */
data want;
set have;
array vars{*} a b c; /* create array of required values */
length val 8 var $8; /* set lengths of new variables */
do i = 1 to dim(vars); /* loop through each element of the array */
    val = vars{i}; /* set val to be current array value */
    var = vname(vars{i}); /* set var to be name of current array variable name */
    drop a b c i; /* drop variables not required */
    output; /* output each value to a new row */
end;
run;

/* sort data in required order */
proc sort data=want;
by var date;
run;