2016-05-11 24 views
0

Sas 9.3を使用するクロス集計に基づいて積み上げ棒グラフを作成しようとしています。私は、9.4でそれをする方法を知っていますが、9.3では、私にとってははるかに難しいように見えます。%でスタックされた棒グラフ

のは、私が(広い形で)、そのようなクロス集計があるとしましょう:

group v1_0 v1_1 
    A  12  88 
    B  17  83 
    C  29  71 

あなたが見ることができるように - 行が代わりに100

にまとめる、私は長い形式でそれを持つことができます:

group v1 val 
    A  0  12 
    A  1  88 
    B  0  17 
    B  1  83 
    C  0  29 
    C  1  71 

私は他の人の間で、試してみました:

proc sgplot data=long_form_data; 
    vbar val/groupdisplay=stack group=group response=v1; 
run; 

しかし、それは賢明なものを作りません。

私は何か助けていただきありがとうございます。前もって感謝します。

EDIT:

9.4のコードは次のように、おそらくになります

Example chart

+0

感謝を。ディスプレイラベルはあなたにとって重要ですか?これは9.4対9.3の唯一の違いです。その9.4のコードは、私が思っていないようにあなたが望むように実際には動かないでしょう... – Joe

答えて

1

vbarの最初の引数は次のとおりです。

proc sgplot data=long_form_data pctlevel=group; 
    vbar val/groupdisplay=stack group=group response=v1; 
run; 

やExcelで作られた同じチャートは以下のようになります。カテゴリであり、値ではありません。だから、あなたはこの種の後方を持っています。

これは実際に9.3から9.4までの違いはありませんが、9.4にはバーのラベル付けのためのいくつかのオプションがあります。

data have; 
    input group $ v1 val; 
datalines; 
    A  0  12 
    A  1  88 
    B  0  17 
    B  1  83 
    C  0  29 
    C  1  71 
;;;; 
run; 

proc sgplot data=have; 
    vbar group/response=val group=v1 groupdisplay=stack; 
run; 

これを行う方法は他にもあります。私の論文Labelling without the hassleを読んで、GTLの使い方を含む他の方法のいくつかについて読んでください。

バーのラベルが重要な場合は、上記の私の論文を読んでください。それはそれです。高低バーと散布図を使用して私たちにそれを行う最も簡単な方法。 (あなたは、残念ながら、VBARsに散布をオーバーレイすることができない、とVBARPARMは9.3で、何らかの理由で積み重ねられたことはできませんでした。)9.4の例を含むため

*Create a dataset with yMin and yMax being bottom/top of each bar segment; 
*yScatter is the midpoint of each bar segment, location to put the label; 
data have_highlow; 
    set have; 
    by group v1; 
    if first.group then _yBase=0; 
    yMin = _yBase; 
    yMax = val + _yBase; 
    yScatter = (val/2) + _yBase; 
    output; 
    _ybase+val; 
run; 

proc SGPLOT data=have_highlow; 
*Here is the bar chart (which is a highlow chart plotting each segment); 
highlow x=group low=yMin high=yMax/ 
    type=bar barwidth=0.6 group=v1 
    groupdisplay=overlay; 

*Need to use discreteoffset to center the label (this is a bit messy); 
scatter x=group y=yScatter/ discreteoffset=-0.08 
    markerchar=val markercharattrs= 
(size=18pt color=white); 

run; 
関連する問題