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;