我正在尝试重新安排我的数据但是我遇到了困难。我的数据看起来像这样:
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)与变量的相应日期和名称叠加在一起。
提前致谢!
答案 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;