2013-04-28 98 views
1

我有以下內容,但我希望控制數據的顯示順序。我不希望按照A,B,C,D,E,F的順序顯示條,而是希望根據用戶指定的順序來顯示條。例如,我希望能夠在SAS數據集中爲一個名爲rank的變量賦值,該變量將控制條塊堆疊的順序。在SAS proc GCHART HBAR語句中顯示的數據順序

我該怎麼做?

%let name=ex_17; 
%let myfont=Albany AMT; 
goptions reset=all; 
goptions reset=(global goptions); 
/*GOPTIONS DEVICE=png xpixels=800 ypixels=400;*/ 
goptions gunit=pct border cback=white colors=(blacks) ctext=black 
htitle=4 htext=3.0 ftitle="&myfont" ftext="&myfont"; 

data mileage; 
     length factor $ 24; 
    input factor $ level $ value;  
    datalines; 
C left -38.882 
C right 39.068 
D right 38.99 
D left -38.97 
E right 38.982 
E left -38.975 
F left -38.973 
F right 38.979 
B left -38.975 
B right 38.975 
A right 38.977 
A left -38.973 
; 

/* base case: 38.975 */ 
data mileage; 
    set mileage; 
    if level="right" then value = value - 38.975; 
    if level="left" then value = -1*(38.975 - value*-1); 
run; 

data convert; 
    set mileage; 
    *if level='left' then value=-value; 
run; 

proc format; 
    picture posval low-high='000,009'; 
run; 

data anlabels(drop=factor level value); 
    length text $ 24; 
    retain function 'label' when 'a' xsys ysys '2' hsys '3' size 2; 

    set convert; 
    midpoint=factor; subgroup=level; 

    *text=left(put(value, BEST6.3)); 

    if level ='left' then position='>'; 
    else position='<'; output; 
run; 

title1 'Sensitivity Analysis graph'; 
*footnote1 justify=left ' SAS/GRAPH' move=(+0,+.5) 'a9'x move=(+0,-.5) ' Software' 
      justify=right 'DRIVER '; 
*title2 'by Daniel Underwood' h=3.0; 
footnote1 'Estimates accurate within +/- 0.002'; 

*axis1 label=(justify=left 'Disutility') style=0 color=black; 
axis1 label=(justify=left '') style=0 color=black; 
*axis2 label=none value=(tick=3 '') minor=none major=none 
     width=3 order=(-10000 to 20000 by 10000) color=black; 
axis2 label=none minor=none major=none value=(tick=3 '') 
     width=3 order=(-0.093 to 0.093 by 0.186) color=black; 


pattern1 value=solid color=ltgray; 
pattern2 value=solid color=ltgray; 
/* 
goption vpos=25; 
goptions vsize=5in; 
*/ 
proc gchart data=convert; 
    format value BEST6.3; 
    note move=(40,90) height=3 'Women' move=(+12,+0) 'Men'; 
    hbar factor/sumvar=value discrete nostat subgroup=level 
       maxis=axis1 raxis=axis2 nolegend annotate=anlabels 
       coutline=same des='' space=2; 
run; 

quit; 
+0

您是否詢問圖表變量(由軸語句控制的因子)或子組變量(由圖例語句控制的級別)的順序? – BellevueBob 2013-04-28 20:25:26

+0

我猜我在問圖表變量的順序,因素。我希望這些因素是基於它們的「價值」水平的絕對值的順序。我想基於自定義排序而不是基於計算來完成此操作。 – synaptik 2013-04-28 20:36:40

回答

1

顯示是通過在任一種AXIS語句ORDER =選項控制值的順序(訂購中點或圖表變量)或LEGEND聲明(訂購子組變量的值)。

如果您要求使用名爲RANK的變量來控制子組變量的順序,here is a SAS sample program就是這樣做的。