SAS SGPLOT yaxis离散顺序=格式化:强制数字排序而不是词汇排序

问题描述 投票:0回答:1

我正在创建一个具有离散 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。

sas heatmap sgplot
1个回答
0
投票

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;

© www.soinside.com 2019 - 2024. All rights reserved.