首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SAS中使用SGplot对箱形图进行排序

在SAS中使用SGplot对箱形图进行排序
EN

Stack Overflow用户
提问于 2015-07-31 04:54:57
回答 1查看 1.4K关注 0票数 2

我正在使用SGPLOT过程在SAS中生成垂直箱图,以下是代码。我不能按不同的类别对箱线图进行排序,我想按被测量变量“胆固醇”的升序平均值对它们进行排序,但似乎无法做到这一点。此外,我希望能够更改不同级别的类别变量"weight_status“的名称,甚至可以考虑按字母顺序绘制箱形图。

代码语言:javascript
复制
proc sgplot data=sashelp.heart;
title "Cholesterol Distribution by Weight Class";
vbox cholesterol / category=weight_status GROUPORDER= descending;
run;
title

有人能帮个忙吗?

EN

回答 1

Stack Overflow用户

发布于 2015-07-31 14:55:35

纠正你的错误

要使用GROUPORDER=,您必须使用GROUP=而不是categories,因此这是可行的:

代码语言:javascript
复制
title "Cholesterol Distribution by Weight Status";
proc sgplot data=sashelp.heart;
    where Weight_Status NE '';
    vbox cholesterol / 
        GROUP=weight_status  
        GROUPORDER= descending;
run;
title

我必须添加where子句,因为缺少的类别会被隐藏,但缺少的组不会。

按被测量变量的均值排序

为此,您必须将该均值添加到数据集,例如,如下所示:

代码语言:javascript
复制
proc sql;
    create view temp_heart as
    select individu.weight_status, cholesterol, group_mean
    from   sashelp.heart individu inner join
        (   select weight_status, mean(cholesterol) as group_mean
            from   sashelp.heart
            group by weight_status ) collection 
        on individu.weight_status EQ collection.weight_status;
quit;

我有两种方法可供您显示

使用平均胆固醇作为类别,使用weight_status作为组

数字类别是按数字顺序排序的,所以这样做是为了在图例中显示您的权重类别,我将它们用作组

代码语言:javascript
复制
proc sgplot data=temp_heart;
    where Weight_Status NE '';
    vbox cholesterol / 
        Category=group_mean
        GROUP=weight_status  ;
run;

现在这是快速和肮脏的,我同意,所以我有另一个选择

使用均值胆固醇作为类别,但在其上设置格式

使用Proc Format创建平均值的格式,然后使用该格式

代码语言:javascript
复制
proc sql;
    create table temp_means as 
    select 'mean2status' as fmtname
         , mean(cholesterol) - 1E-8 as start
         , mean(cholesterol) + 1E-8 as end
         , weight_status as label
    from   sashelp.heart
    group by weight_status;
quit;

proc format cntlin=temp_means (where=(label NE '')) cntlout=temp_check;
run;

proc sgplot data=temp_heart (where=(weight_status NE ''));
    format group_mean mean2status.;
    vbox cholesterol / 
        category=group_mean;
run;

不幸的是,在它起作用之前,我不得不在平均值附近使用2E-8的间隔。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31733862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档