在SAS中按组和子组堆积条形图

时间:2015-04-08 10:42:38

标签: sas

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

我无法在同一轴(年)上设置SEGMENT'ACTUAL'和'FORECAST'的共同年份。实际意味着数据到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;

enter image description here enter image description here

1 个答案:

答案 0 :(得分:2)

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

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;

基本上,除了segment之外的所有事情,然后使用该值进行注释。您可以像我一样手动生成它,或者(最好)从原始数据生成它(如果它可以改变)。我使用WALLPERCENT,因为它将在上半年预测实际上半年,但如果它可以改变(2实际4预测),那么你不应该这样做;您应该使用WALLPERCENT并从数据中找出正确的位置(可能使用proc freq)或使用DATAVALUE并将其置于中间值之下。

如果这还不够,我会去robslink.com,它有一套很好的例子(由GCHART的一组开发人员编写)。 Sanjay还有一个博客,Graphically Speaking,其中有一些很好的例子,都在SAS Communities上发布。

我制作的图像如下。它在其他方式上并不是特别接近,但所有这些都很容易修复(颜色方案,大小,传说的位置)。 enter image description here

数据标签是你能够做到这一点的一件事;如果您使用VBARPARM,它们可以添加,但这需要提前汇总数据。 Sanjay在他blog posts的一个大约9.4M2(如果你有M2维护版本)中覆盖了这个;如果您的版本较旧,我也会在MWSUG Paper, Labelling without the Hassle: How to Produce Labeled Stacked Bar Charts Using SGPLOT and GTL Without Annotate中介绍此内容。