如何使用短格式数据创建重叠直方图 sas?
How to create overlaid histograms sas with short format data?
我有这样的数据:
var1 target
1.2 X
2 Y
2.3 Z
我想用百分比覆盖直方图,看起来像这样:
图表可以堆叠,只要它们是可比较的。我已经试过了,但它不起作用:
proc univariate data=mydata;
var var1;
by target;
histogram;
run;
将它们放在一个面板中非常容易:
data have_data;
call streaminit(7);
do _j = 1 to 1e3;
do _i = 1 to 3;
target=byte(_i+120);
var1=rand('Normal',_i,0.5);
output;
end;
end;
run;
proc sgpanel data=have_data;
panelby target/columns=1;
histogram var1;
density var1;
run;
当然,这不是重叠的。覆盖更具挑战性,我认为需要一些额外的步骤。
要进行叠加,最简单的选择可能是将 var1
拆分为三个变量,每个目标值一个。 (对于其他目标值,它可以为空。)然后在一个 SGPLOT
调用中创建三个直方图和密度图。
data want;
set have_Data;
array vars[3];
vars[rank(target)-120] = var1;
run;
title;
proc sgplot data=want noautolegend;
histogram vars1/name='x' legendlabel='x';
histogram vars2/name='y' legendlabel='y';
histogram vars3/name='z' legendlabel='z';
density vars1;
density vars2;
density vars3;
keylegend 'x' 'y' 'z'/position=top;
run;
我想你也可以使用 gtl
来做到这一点,如果你知道 and/or 很乐意学习它,因为它允许你叠加直方图,如果需要的话我可能会嘲笑有事。
在 SAS 9.4m3 中,OVERLAY 选项被添加到 PROC UNIVARIATE 的 HISTOGRAM 语句中。这意味着您现在可以直接从 PROC UNIVARIATE 获取所需的图表:
proc Univariate data=sashelp.iris;
class Species;
var SepalLength;
histogram SepalLength / kernel overlay;
run;
在 PROC SGPLOT 中,SAS 9.4m2 引入了对 HISTOGRAM 语句中 GROUP= 选项的支持。因此,如果您更喜欢 PROC SGPLOT,则可以将数据转换为长格式并使用 GROUP= 选项。
proc sgplot data=sashelp.iris;
histogram SepalLength / group=Species transparency=0.5;
density SepalLength/ group=Species type=kernel;
run;
有关叠加和镶嵌直方图的更多信息,请参阅文章 "Comparative histograms: Panel and overlay histograms in SAS"
我有这样的数据:
var1 target
1.2 X
2 Y
2.3 Z
我想用百分比覆盖直方图,看起来像这样:
图表可以堆叠,只要它们是可比较的。我已经试过了,但它不起作用:
proc univariate data=mydata;
var var1;
by target;
histogram;
run;
将它们放在一个面板中非常容易:
data have_data;
call streaminit(7);
do _j = 1 to 1e3;
do _i = 1 to 3;
target=byte(_i+120);
var1=rand('Normal',_i,0.5);
output;
end;
end;
run;
proc sgpanel data=have_data;
panelby target/columns=1;
histogram var1;
density var1;
run;
当然,这不是重叠的。覆盖更具挑战性,我认为需要一些额外的步骤。
要进行叠加,最简单的选择可能是将 var1
拆分为三个变量,每个目标值一个。 (对于其他目标值,它可以为空。)然后在一个 SGPLOT
调用中创建三个直方图和密度图。
data want;
set have_Data;
array vars[3];
vars[rank(target)-120] = var1;
run;
title;
proc sgplot data=want noautolegend;
histogram vars1/name='x' legendlabel='x';
histogram vars2/name='y' legendlabel='y';
histogram vars3/name='z' legendlabel='z';
density vars1;
density vars2;
density vars3;
keylegend 'x' 'y' 'z'/position=top;
run;
我想你也可以使用 gtl
来做到这一点,如果你知道 and/or 很乐意学习它,因为它允许你叠加直方图,如果需要的话我可能会嘲笑有事。
在 SAS 9.4m3 中,OVERLAY 选项被添加到 PROC UNIVARIATE 的 HISTOGRAM 语句中。这意味着您现在可以直接从 PROC UNIVARIATE 获取所需的图表:
proc Univariate data=sashelp.iris;
class Species;
var SepalLength;
histogram SepalLength / kernel overlay;
run;
在 PROC SGPLOT 中,SAS 9.4m2 引入了对 HISTOGRAM 语句中 GROUP= 选项的支持。因此,如果您更喜欢 PROC SGPLOT,则可以将数据转换为长格式并使用 GROUP= 选项。
proc sgplot data=sashelp.iris;
histogram SepalLength / group=Species transparency=0.5;
density SepalLength/ group=Species type=kernel;
run;
有关叠加和镶嵌直方图的更多信息,请参阅文章 "Comparative histograms: Panel and overlay histograms in SAS"