在PROC GCHART中,创建条形图时,垂直条的颜色由PATTERN语句确定。 PATTERN语句根据值的字母顺序或层次顺序为条形指定颜色。如何根据值专门指定颜色?例如,如果我的值是“男孩”和“女孩”,那么无论值“女孩”是否存在,我怎样才能使值“boy”显示为蓝色,反之亦然?
答案 0 :(得分:2)
不幸的是,如果您使用的是SAS / GRAPH,则无法使用属性映射,这是处理此问题的方法。如果您有SAS 9.2+,则可以使用具有该选项的ODS图形(PROC SGPLOT
)。 attrmap
将proc与数据集连接起来,该数据集存储变量的值以及与该变量的每个值相关联的颜色(或其他属性)。
*create dummy dataset;
data finances;
format income dollar8. expense dollar8.;
length expensetype $ 9;
input Year incometype $ income expensetype $ expense;
datalines;
2000 Salary 20000 Utilities 4000
2000 Bonus 2000 Rent 7000
2000 Gifts 500 Food 8000
2001 Salary 25000 Utilities 5000
2001 Bonus 1000 Rent 8000
2001 Gifts 200 Food 6000
2002 Salary 23000 Utilities 4500
2002 Bonus 500 Rent 9000
2002 Gifts 500 Food 7000
;
run;
*Create attribute map. ID = used to specify its use later, usually matches the variable but does not have to. Value is the value you are changing the color/etc. for. Then variables appropriate to what you are changing and to what, so fillcolor here for example. ;
data attrmap;
length value $ 9 fillcolor $ 9; *I find that problems with attrmaps usually are due to length differences in dataset variables vs attrmap variables;
retain linecolor "black"; *using black for all of them;
input id $ value $ fillcolor $;
datalines;
income Salary blue
income Bonus gray
income Gifts lightgray
expense Utilities red
expense Rent yellow
expense Food orange
;
run;
proc sgplot data=finances dattrmap=attrmap; *specifying the attrmap here;
yaxis label="Dollars";
vbarparm category=year response=income / group=incometype attrid=income /*using the attrmap here */
barwidth=0.4 discreteoffset=-0.2 name="income";
vbarparm category=year response=expense / group=expensetype attrid=expense
barwidth=0.4 discreteoffset=0.2 name="expense";
keylegend "income" / position=bottomleft title="Income";
keylegend "expense" / position=bottomright title="Expenses";
run;