将多个变量转置到以日期为后缀的列
Transpose Multiple Variables to Columns Suffixed with Dates
我有这样的数据:
data have;
format date monyy.;
input date:date9. group$ value1 value2;
datalines;
01JAN2020 A 100 10
01FEB2020 A 200 20
01JAN2020 B 300 30
01FEB2020 B 400 40
;
run;
但我需要它看起来像这样,其中 value1 value2
后缀为 date
。此格式正用于导出到 Excel.
data want;
input group$ value1_JAN20 value1_FEB20 value2_JAN20 value2_FEB20;
datalines;
A 100 200 10 20
B 300 400 30 40
;
run;
我试过 PROC TRANSPOSE
,但 value1 value2
的实际值存储为日期名称,value1 value2
的名称存储在列 _NAME_
中。
有没有办法用 PROC TRANSPOSE
做到这一点,或者这只是一个数据 step/macro 解决方案?
proc transpose data = have
out = try
delim = '_'n
name = date;
by group;
id date;
var value1 value2;
run;
转置两次。首先要获得真正的垂直结构。然后生成你想要的结构。
data have;
input date :date9. group $ value1 value2;
format date monyy.;
datalines;
01JAN2020 A 100 10
01FEB2020 A 200 20
01JAN2020 B 300 30
01FEB2020 B 400 40
;
proc transpose data=have out=tall;
by group date ;
var value1-value2;
run;
proc transpose data=tall out=want(drop=_name_) delim=_;
by group;
id _name_ date ;
var col1 ;
run;
结果:
value1_ value2_ value1_ value2_
Obs group JAN20 JAN20 FEB20 FEB20
1 A 100 10 200 20
2 B 300 30 400 40
我有这样的数据:
data have;
format date monyy.;
input date:date9. group$ value1 value2;
datalines;
01JAN2020 A 100 10
01FEB2020 A 200 20
01JAN2020 B 300 30
01FEB2020 B 400 40
;
run;
但我需要它看起来像这样,其中 value1 value2
后缀为 date
。此格式正用于导出到 Excel.
data want;
input group$ value1_JAN20 value1_FEB20 value2_JAN20 value2_FEB20;
datalines;
A 100 200 10 20
B 300 400 30 40
;
run;
我试过 PROC TRANSPOSE
,但 value1 value2
的实际值存储为日期名称,value1 value2
的名称存储在列 _NAME_
中。
有没有办法用 PROC TRANSPOSE
做到这一点,或者这只是一个数据 step/macro 解决方案?
proc transpose data = have
out = try
delim = '_'n
name = date;
by group;
id date;
var value1 value2;
run;
转置两次。首先要获得真正的垂直结构。然后生成你想要的结构。
data have;
input date :date9. group $ value1 value2;
format date monyy.;
datalines;
01JAN2020 A 100 10
01FEB2020 A 200 20
01JAN2020 B 300 30
01FEB2020 B 400 40
;
proc transpose data=have out=tall;
by group date ;
var value1-value2;
run;
proc transpose data=tall out=want(drop=_name_) delim=_;
by group;
id _name_ date ;
var col1 ;
run;
结果:
value1_ value2_ value1_ value2_
Obs group JAN20 JAN20 FEB20 FEB20
1 A 100 10 200 20
2 B 300 30 400 40