我正在尝试生成具有多个分组的图。示例数据代码为:
proc sort data=sashelp.cars out=cars; by DriveTrain; where n(Cylinders); run;
我使用dattrmap
向不同的组添加了不同的颜色,如下所示:
data MyAttrMap; length MARKERCOLOR CONTRASTCOLOR color $25; ID='myreg'; value='All' ; MARKERCOLOR='red'; color='red'; MARKERSYMBOL = 'circle'; output; ID='myreg'; value='Front'; MARKERCOLOR='blue'; color='blue'; MARKERSYMBOL = 'circle'; output; ID='myreg1'; value='USA'; CONTRASTCOLOR='yellow'; color='yellow'; output; ID='myreg1'; value='Europe'; CONTRASTCOLOR='black'; color='black'; output; ID='myreg1'; value='Asia'; CONTRASTCOLOR='green'; color='green'; > > output; run; proc sgplot data=work.cars dattrmap=MyAttrMap; hbarparm category=enginesize response=horsepower/group=DriveTrain barwidth=.5 attrid=myreg name='dt'; scatter X=MPG_City Y=enginesize /group=origin name='origin' attrid=myreg1; keylegend 'dt' / title='Drive Train' location=outside position=bottom; keylegend 'origin' / title='Origin' location=outside position=bottom; where DriveTrain in ('All' 'Front'); run;
创建Attrmap的目的是为Origin
和DriveTrain
使用不同的颜色,但是,当创建输出时,将应用于Origin的相同颜色应用于DriveTrain。
我还尝试使用Proc模板来更改样式,如下所示:
/*Different colors from the ones used above*/ proc template; define style MyStyle; parent = Styles.Listing; STYLE graphdata1 / MARKERSYMBOL = 'circle' LINESTYLE = 1 CONTRASTCOLOR = liypk COLOR = red ; STYLE graphdata2 / MARKERSYMBOL = 'circle' LINESTYLE = 1 CONTRASTCOLOR = stybr COLOR = yellow ; STYLE graphdata3 / MARKERSYMBOL = 'circle' LINESTYLE = 1 CONTRASTCOLOR = mog COLOR = green ; STYLE graphdata4 / MARKERSYMBOL = 'circle' LINESTYLE = 1 CONTRASTCOLOR = brown COLOR = pink ; STYLE graphdata5 / MARKERSYMBOL = 'circle' LINESTYLE = 1 CONTRASTCOLOR = black COLOR = grey ; end; run;
但是仍然获得了相同的结果。谁能告诉我我在做什么错或如何使它正常工作?我正在使用SAS 9.3。
我遇到的另一个问题是排序。我想对这些条进行排序,以使相同的原点一起出现并以马力显示。我按照SAS的建议使用sortkey=national
进行了排序,并使用了grouporder=data
,但这并没有改变输出的顺序。任何帮助表示赞赏。
谢谢。
答案 0 :(得分:2)
您可能会发现SGPANEL
是一个更好的选项,可以直观地呈现不同组的分布。
ods html style=normal;
ods graphics / height=900px;
proc sgpanel data=sashelp.cars;
panelby origin
/ columns=3
;
hbar enginesize
/ group=drivetrain
groupdisplay=cluster
;
where
DriveTrain in ('Front', 'All')
and not missing(cylinders)
;
run;
答案 1 :(得分:0)
检查属性映射数据集。由于您尚未为 Value 和 ID 列指定长度,因此它们被截断并且与您的数据不匹配,因此无法正确分配它们。
为简化您的问题,我分配了所有要测试的元素:
我还认为这是由于日志中的错误而造成的。
proc sort data=sashelp.cars out=cars;
by DriveTrain;
where n(Cylinders);
run;
data MyAttrMap;
length ID $10. linecolor MARKERCOLOR CONTRASTCOLOR fillcolor color value $25;
ID='myreg1';
value='USA';
contrastcolor='cxaf8dc3';
LINECOLOR='cxaf8dc3';
MARKERCOLOR='cxaf8dc3';
fillcolor='cxaf8dc3';
output;
ID='myreg1';
value='Europe';
contrastcolor='cx7fbf7b';
LINECOLOR='cx7fbf7b';
MARKERCOLOR='cx7fbf7b';
fillcolor='cx7fbf7b';
output;
ID='myreg1';
value='Asia';
contrastcolor='cx91bfdb';
LINECOLOR='cxfc8d59';
MARKERCOLOR='cxfc8d59';
fillcolor='cxfc8d59';
output;
run;
ods graphics / attrpriority=none;
proc sgplot data=work.cars dattrmap=MyAttrMap;
scatter X=MPG_City Y=enginesize /group=origin name='origin' attrid=myreg1;
where DriveTrain in ('All' 'Front');
run;