0

我需要帮助创建一个条形图,将条形图配对在一起(按两个级别的组),用于四个时间段。这是我的数据表的样子,按“组”排序:

在此处输入图像描述

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

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

这让我明白了:

在此处输入图像描述

但是,我想将这两个条“平滑”在一起,使它们相互接触,然后为每个组级别、其他三个时间段添加均值,所有这些都在一个图中。我尝试将其他时间段添加到“response=”行(包括逗号和不带逗号),但这不起作用。

请帮忙!

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

TIA 寻求帮助。

4

1 回答 1

0

您将需要转置数据,以便拥有idgroupperiod、列result

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;

图片

在此处输入图像描述

于 2020-06-05T09:59:03.400 回答