如何在SAS中使用多列转置数据

如何在SAS中使用多列转置数据,sas,transpose,proc,Sas,Transpose,Proc,嗨,我是SAS的新手,我有个问题。我有包含337行和64列的数据。 看起来是这样的: 我需要这样做: 我试过使用proc转置,但我觉得。 请帮助。您需要按日期转置,然后按国家日期排序,,我假定国家是原始变量的标签 例如: 3个日期和5个变量,易于更改以获得更大的数据 data total_returns(label='Example data'); do date = '01jan2020'd to '03jan2020'd; array RI RI_1-RI_5; do

嗨,我是SAS的新手,我有个问题。我有包含337行和64列的数据。 看起来是这样的: 我需要这样做:

我试过使用proc转置,但我觉得。
请帮助。

您需要
按日期转置
,然后
按国家日期排序
,我假定国家是原始变量的标签

例如: 3个日期和5个变量,易于更改以获得更大的数据

data total_returns(label='Example data');
  do date = '01jan2020'd to '03jan2020'd;
    array RI RI_1-RI_5;
    do over ri;
      demo_value + 1;
      RI = demo_value;
    end;
    output;
  end;
  label
    RI_1 = 'MSCI Country Biff blah blah blah'
    RI_2 = 'MSCI Country Bam blah blah blah'
    RI_3 = 'MSCI Country Boom blah blah blah'
    RI_4 = 'MSCI Country Zwok blah blah blah'
    RI_5 = 'MSCI Country Pow blah blah blah'
  ;
  format date yymmdd10.;
  drop demo_value;
run;

proc transpose 
  data=total_returns 
  out=stage1 ( 
    drop=_name_ 
    rename= ( _label_=Country  
              col1 = RI
            ) 
  )
;
  by date;
  var RI_1-RI_5;
  label country = ' ';
run;

proc sort data=stage1 out=want;
  by country date;
run;

proc print label data=total_returns;
  title "Original, across/array layout";
proc print data=want;
  title "Transposed and Sorted, categorical/vector layout";
run;
输出:

您需要
按日期转置
,然后
按国家日期排序
,我假定国家是原始变量的标签

例如: 3个日期和5个变量,易于更改以获得更大的数据

data total_returns(label='Example data');
  do date = '01jan2020'd to '03jan2020'd;
    array RI RI_1-RI_5;
    do over ri;
      demo_value + 1;
      RI = demo_value;
    end;
    output;
  end;
  label
    RI_1 = 'MSCI Country Biff blah blah blah'
    RI_2 = 'MSCI Country Bam blah blah blah'
    RI_3 = 'MSCI Country Boom blah blah blah'
    RI_4 = 'MSCI Country Zwok blah blah blah'
    RI_5 = 'MSCI Country Pow blah blah blah'
  ;
  format date yymmdd10.;
  drop demo_value;
run;

proc transpose 
  data=total_returns 
  out=stage1 ( 
    drop=_name_ 
    rename= ( _label_=Country  
              col1 = RI
            ) 
  )
;
  by date;
  var RI_1-RI_5;
  label country = ' ';
run;

proc sort data=stage1 out=want;
  by country date;
run;

proc print label data=total_returns;
  title "Original, across/array layout";
proc print data=want;
  title "Transposed and Sorted, categorical/vector layout";
run;
输出:

显示您运行的代码并解释它是如何失败的。DATE的值是否唯一标识原始日期集中的行?也就是说,有337个不同的日期值吗?如果没有,请描述什么是唯一标识行的。如果您只是将DATE作为一个id变量,那么您应该期望在输出数据集中使用变量DATE、_NAME_uu和COL1获得337*63个观察值。显示您运行的代码并解释它是如何失败的。DATE的值是否唯一标识原始日期集中的行?也就是说,有337个不同的日期值吗?如果没有,请描述什么是唯一标识行的。如果您只是将DATE作为一个id变量,那么您应该期望在输出数据集中使用变量DATE、_NAME_uu和COL1获得337*63个观察值。