将多个变量转置到以日期为后缀的列

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