SAS 中的成对条形图

Paired bar charts in SAS

我需要帮助创建一个条形图,将条形图配对在一起(按两个级别的组),四个时间段。这是我的 table 数据的样子,按 'Group':

排序

我已经想出如何绘制两组的均值,但一次只绘制一个时间段:

proc sgplot data=Testdata;
  vbar Group /
    response=Baseline
    stat=mean
    GROUPDISPLAY = CLUSTER;
run;

这让我明白了:

不过,我想"smoosh"把这两个柱子放在一起,让它们相互接触,然后添加方法,对于每个级别的组,对于其他三个时间段,都在一个情节。我试过将其他时间段添加到 'response=' 行(带逗号和不带逗号),但这不起作用。

请帮忙!

(我知道这有点贪心,但如果有人能告诉我如何根据组级别更改条形颜色,那就太好了)

TIA 寻求帮助。

您需要转置数据,以便拥有列 idgroupperiodresult

VBAR 语句将从

  • VBAR GROUP
  • VBAR PERIOD

并且您可以使用 VBAR 功能

  • group = GROUP
  • datalabel = result
  • statlabel

示例:

data have;
  call streaminit(123);
  do group = 'A' , 'B';
    do _n_ = 1 to ifn(group='A',6,11);
      id + 1;
      baseline = ifn(group='A', 2125, 4400) + rand('integer', 400) - 200;
      period1 =  ifn(group='A', 2425, 4100) + rand('integer', 600) - 300;
      period2 =  ifn(group='A', 1800, 3600) + rand('integer', 500) - 250;
      period3 =  ifn(group='A', 1600, 2800) + rand('integer', 500) - 250;
      output;
    end;
  end;

  label 
    baseline = 'Basline'
    period1  = '14 Day Average'
    period2  = '30 Day Average'
    period3  = '60 Day Average'
  ;
run;

proc transpose data=have 
  out=plotdata ( 
    rename=(
      _name_  = period
      _label_ = period_label
      col1    = result
    ))
;
  by id group notsorted;
  var baseline period1-period3;
  label period = ' ';
  label period_label = ' ';
run; 

ods html file='plot.html' style=plateau;

proc sgplot data=plotdata;
  vbar period_label /
    response = result
    stat = mean
    groupdisplay = cluster
    group = group
    datalabel = result statlabel
  ;

  xaxis display=(nolabel);
run;

ods html close;

图片