Graph 在SAS中使用SGplot对箱线图进行排序
我使用SGPLOT过程在SAS中生成垂直箱线图,下面是代码。我不能按各种类别对箱线图进行排序,我想通过测量“胆固醇”的变量的升序平均值对它们进行排序,但似乎无法做到这一点。此外,我希望能够改变不同级别的类别变量的名称“WeithItHyb”,甚至可以考虑按字母顺序排序的方框图。< /P>Graph 在SAS中使用SGplot对箱线图进行排序,graph,sas,boxplot,Graph,Sas,Boxplot,我使用SGPLOT过程在SAS中生成垂直箱线图,下面是代码。我不能按各种类别对箱线图进行排序,我想通过测量“胆固醇”的变量的升序平均值对它们进行排序,但似乎无法做到这一点。此外,我希望能够改变不同级别的类别变量的名称“WeithItHyb”,甚至可以考虑按字母顺序排序的方框图。< /P> proc sgplot data=sashelp.heart; title "Cholesterol Distribution by Weight Class"; vbox cholesterol / cate
proc sgplot data=sashelp.heart;
title "Cholesterol Distribution by Weight Class";
vbox cholesterol / category=weight_status GROUPORDER= descending;
run;
title
有人能帮忙吗?纠正您的错误
要使用GROUPORDER=
,您必须使用GROUP=
而不是类别,因此:
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子句,因为缺少的类别会被抑制,而缺少的组则不会
按被测变量的平均值排序
为此,必须将该平均值添加到数据集中,例如:
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;
我有两种方法让你展示这个
使用平均胆固醇作为类别,使用体重状态作为组
数字类别是按数字顺序排序的,因此这就完成了工作,但为了在图例中显示您的权重类别,我使用它们作为组
proc sgplot data=temp_heart;
where Weight_Status NE '';
vbox cholesterol /
Category=group_mean
GROUP=weight_status ;
run;
我同意,这是又快又脏的,所以我有另一个选择
使用“平均胆固醇”作为类别,但要在其上设置格式
使用Proc Format
创建平均值格式,然后使用该格式
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的间隔,然后才能工作。您应该提供一个样本
temp
数据集,或者重写它来处理sashelp
数据集(sashelp.class
,sashelp.cars
,等等)。当然,Joe-我对代码进行了更改,使其能够处理sashelp数据集。我需要能够通过平均值(升序)显示结果的3个箱线图。此外,我希望能够更改各种类别值的“显示”名称,例如,正常值为N,超重值为O,体重不足值为U,而无需在数据集中实际更改。谢谢Dirk。您的过程sql代码中的“individu”是什么?我在任何地方都找不到该名称的变量/数据集。在创建视图时,我也无法选择更多变量-我收到一个错误。甚至不能在括号内的select语句中将其子集individu
和collection
都是sashelp.heart和子查询的别名