我正在创建一个具有离散 X 轴和离散 Y 轴的热图。离散 Y 轴是数字的 (BEST12.),但
yaxis discreteorder=formatted
和 discreteorder=unformatted
都按字典顺序对变量进行排序。
预计:1 2 3 4 5 ... 10 11 12 ... 20 实际:1 10 11 ... 2 20 21 ....
如何强制进行数字排序?
proc sgplot data=Heatmap;
yaxis discreteorder=formatted;
heatmap x=Battalion y=StationArea / name='HeatMap' discretey discretex
colorresponse=arrive_seconds colorstat=mean;
gradlegend 'HeatMap';
run;
**编辑 Stu 建议使用“proc sort”,然后省略“discreteorder”:
那么结果就是y轴上的第一个值只是B01响应过的StationArea。
按
StationArea Battalion
对数据进行排序,然后创建不带 yaxis discreteorder
选项的热图。
proc sort data=heatmap;
by StationArea Battalion;
run;
proc sgplot data=Heatmap;
heatmap x=Battalion y=StationArea / name='HeatMap' discretey discretex
colorresponse=arrive_seconds colorstat=mean;
gradlegend 'HeatMap';
run;
如果您的营数量超过 10 个,您可以通过提取数字并按其排序来确保其保持正确的顺序。您可以使用
battalion_nbr = input(substr(Battalion, 2, 2), 8.);
提取数字。例如:
data heatmap;
format StationArea BEST12.;
call streaminit(1234);
do StationArea = 1 to 50;
do Battalion = 'B01', 'B02', 'B03', 'B04', 'B05', 'B06',
'B07', 'B08', 'B09', 'B10', 'B11', 'B99'
;
battalion_nbr = input(substr(Battalion, 2, 2), 8.);
arrive_seconds = abs(rand('normal'));
output;
end;
end;
run;
proc sort data=heatmap;
by StationArea battalion_nbr;
run;
proc sgplot data=Heatmap;
heatmap x=Battalion y=StationArea / name='HeatMap' discretey discretex
colorresponse=arrive_seconds colorstat=mean;
gradlegend 'HeatMap';
run;