举个例子,我有两组,每组四只动物。该组是变量group
,子组变量是animal
,并且主题需要出现在图表中,因为它们出现在数据集中。但是,gchart
继续按升序放置子组变量。有一种简单的方法可以控制它吗?
下面是模拟数据集和代码:
data test;
input animal $ group ttd;
datalines;
A157 1 840
A164 1 840
A163 1 840
A118 1 840
A113 2 125
A109 2 230
A175 2 840
A304 2 50
;
run;
axis1 label=(f=arial h=1.5 'Time to Death (Hours Post-Exposure)') value=(f=arial h=1) order=(0 to 840 by 120) minor=(n=5) offset=(1,1);
axis2 label=(f=arial h=1.2 j=r 'Group') value=(f=arial h=1);
axis3 label=(f=arial h=1.2 j=c 'Animal') value=(f=arial h=1);
PATTERN1 C=BLACK;
proc gchart data=test;
hbar animal /group=group nozero nostats sumvar=ttd type=sum
width=0.4 space=1 raxis=axis1 gaxis=axis2 maxis=axis3;
run; quit;
请注意,生成的图形按升序排列了子组animals
,而不是数据集中的正确顺序:
答案 0 :(得分:1)
我明白了。我基本上创建了一个order变量,命名变量动物名称,然后使用该有序变量创建图表而不是动物本身。以下是快速流程:
创建订单变量
data test1; set test;
temp=_n_;
char_animal=put(temp,3.);
run;
将您的动物序列列入清单
proc sql;
select distinct quote(animal)
into: animallist separated by " "
from test1 order by temp;
quit;
%put &animallist.;
在axis3
语句中,使用值语句中的宏列表来" name"订单变量动物名称
axis1 label=(f=arial h=1.5 'Time to Death (Hours Post-Exposure)') value=(f=arial h=1) order=(0 to 840 by 120) minor=(n=5) offset=(1,1);
axis2 label=(f=arial h=1.2 j=r 'Group') value=(f=arial h=1);
axis3 label=(f=arial h=1.2 j=c 'Animal') value=(f=arial h=1 &animallist.);
PATTERN1 C=BLACK;
proc gchart data=test1;
hbar char_animal /group=group nozero nostats sumvar=ttd type=sum
width=0.4 space=1 raxis=axis1 gaxis=axis2 maxis=axis3;
run; quit;
现在注意图中的正确顺序:
答案 1 :(得分:0)
我认为你无法按照数据集顺序获取它。 (从技术上讲,顺便说一句,这是动物价值的升序顺序 - 当它下降时,它仍然被认为是从过程的角度提升;见ASCENDING / DESCENDING选项如何命令。)
根据我的理解,HBAR的gplot允许(默认值=值的升序,ASCENDING =柱的升序,DESCENDING =柱的降序)。
您可以使用SGPLOT(具有grouporder=data
选项,至少为9.4)。
proc sgplot data=test;
hbar group/ response=ttd group=animal groupdisplay=cluster grouporder=reversedata;
run;
我使用reversedata
,因为上升/下降的东西在hbars中翻转而不是看似合乎逻辑的东西,但如果您愿意,也可以翻转轴本身(或者如果您的版本中没有reverseata)