SAS中按组和子组的堆叠条形图

SAS中按组和子组的堆叠条形图,sas,Sas,我无法在sas9.4中按组和子组创建堆叠图表,我需要类似于excel图形的图表。请在下面找到示例数据和excel图(第一张图)以及SAS图(第二张图) 我无法在同一轴(年份)上为“实际”和“预测”段设置普通年份。数据截至2014年的实际平均值和2014年后的预测平均值应位于同一轴上 goptions reset=all ; goptions colors=(red blue green); legend1 label=none ; proc gchart data=NEW; vbar year

我无法在sas9.4中按组和子组创建堆叠图表,我需要类似于excel图形的图表。请在下面找到示例数据和excel图(第一张图)以及SAS图(第二张图)

我无法在同一轴(年份)上为“实际”和“预测”段设置普通年份。数据截至2014年的实际平均值和2014年后的预测平均值应位于同一轴上

goptions reset=all ;
goptions colors=(red blue green);
legend1 label=none ;

proc gchart data=NEW;
vbar year/ discrete type=sum sumvar=VALUE 
  group= segment subgroup=WKSCOPE      ;
  where year le 2020 AND YEAR ge 2012;
run;

我会用注释来解决这个问题。我知道
SGPLOT
GCHART
好,所以我会这样回答

data have;
  input segment $ year wkscope $ value;
  datalines;
ACTUAL 2012 PH 5
ACTUAL 2012 PH 1
ACTUAL 2012 BHS 1
ACTUAL 2012 RES 2
ACTUAL 2013 PH 2
ACTUAL 2013 PH 5
ACTUAL 2013 BHS 1
ACTUAL 2014 RES 2
FORECAST 2015 PH 3
FORECAST 2015 BHS 0
FORECAST 2016 PH 4
FORECAST 2016 RES 1
FORECAST 2017 PH 5
FORECAST 2017 BHS 1
FORECAST 2017 RES 2
;;;;
run;

data sgannods;
  x1space='wallpercent';
  y1space='wallpercent';
  x1=75;
  y1=-10;
  label="Forecast";
  function='text';
  output;
  x1=25;
  label="Actual";
  output;
run;

proc sgplot data=have sganno=sgannods;
    vbar year/response=value group=wkscope groupdisplay=stack;
run;
基本上,除了段之外,什么都做,然后使用该值进行注释。您可以像我一样手动生成它,或者(最好)根据原始数据生成它(如果它可以更改)。我使用
WALLPERCENT
,因为上半年是实际的,下半年是预测的,但是如果它可以改变(2实际4预测),那么你不应该这样做;您应该使用
WALLPERCENT
并从数据中计算出正确的位置(可能使用proc freq),或者使用
DATAVALUE
并将其置于中间值之下

如果这还不够接近,我会转到,它有一组很好的示例(由GCHART proc集的一位开发人员编写)。Sanjay也有一个博客,从图形上讲,它有一些很好的例子,两个博客都发布在

我制作的图像如下。它在其他方面并不特别接近,但所有这些都很容易修复(颜色方案、大小、图例位置)。


数据标签是用这种方式不能真正拥有的东西;如果您使用
VBARPARM
,它们是可以添加的,但这需要提前汇总数据。Sanjay在他的一本大约9.4M2(如果您有M2维护版本)中介绍了这一点;如果你有旧版本的话,我也会在我的文章中介绍这一点。

谢谢Joe,还有一件事我必须维护RBG颜色和标签如果你需要的话,你可以在另一个问题中询问如何做到这一点,但谷歌很容易做到。