在SAS中堆叠数据

时间:2015-04-21 03:34:58

标签: 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   b
1998  9   b
1996  8   c
1997  3   c
1997  6   c

因此,我基本上将变量(a,b,c)与变量的相应日期和名称叠加在一起。

提前致谢!

2 个答案:

答案 0 :(得分:6)

使用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排序,然后DATE

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

答案 1 :(得分:2)

既然您提到数组,那么您将如何使用它们来实现结果 但是,我会在@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;