我正在尝试重新整理我的数据,但遇到了一段困难的时间。我拥有的数据如下所示:
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)与变量的相应日期和名称堆叠在一起。
提前感谢!
发布于 2015-04-21 13:03:18
使用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;发布于 2015-04-21 18:30:31
既然您提到了数组,下面将介绍如何使用它们来实现结果。
但是,我会在@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;https://stackoverflow.com/questions/29762443
复制相似问题