在SAS中为单列表生成直方图
我有一个只有一列的表,我希望根据表中的列生成一个直方图在SAS中为单列表生成直方图,sas,histogram,Sas,Histogram,我有一个只有一列的表,我希望根据表中的列生成一个直方图 age --- 22 33 40 74 ods graphics / reset width=6.4in height=4.8in imagemap; proc sgplot data=WORK.COMBINE; title height=14pt "Displaying maximum"; histogram age / showbins; density age; density age / typ
age
---
22
33
40
74
ods graphics / reset width=6.4in height=4.8in imagemap;
proc sgplot data=WORK.COMBINE;
title height=14pt "Displaying maximum";
histogram age / showbins;
density age;
density age / type=Kernel;
run;
ods graphics / reset; title;
我面临的问题是,它没有显示对应y轴上的数字。虽然我只有一列,但我想显示具有最高数字的直方图,同时每个值在Y轴上保持其对应关系,但令我惊讶的是,即使是最高值也比最低值短,仅这4个数据值的直方图如下所示: 绘图例程计算存储箱的年龄范围以及存储箱中心的位置。计算是一些内部算法,您可以通过
直方图语句选项/binstart=binwidth=nbins=
对其进行控制
当然,柱状图条形图是用于存储箱的,高度根据落入存储箱的值的相对计数进行缩放。y轴将为实际计数或计数百分比。您将4个值分为3个存储箱,因此其中一个存储箱的计数为2(或50%=2/4)。最高值栏比最低值栏短,因为高值比低值少
当您有更多数据时会发生什么
这里有一些代码,创建了250个符合正态分布的值,并对它们进行了直方图分析,还显示了累积频率针图
data work.have;
do personid = 1 to 250;
do until (18 <= age <= 60);
age = floor(18 + (32 + sqrt(62) * rannor(123)));
end;
output;
end;
run;
proc freq noprint data=have;
table age / out=freq outcum; * data for needle plot;
run;
proc sgplot data=have;
title height=14pt "Default bins";
histogram age / showbins;
density age;
density age / type=Kernel;
run;
proc sgplot data=have;
title height=14pt "binstart=20 binwidth=2";
histogram age / showbins binstart=20 binwidth=2;
density age;
density age / type=Kernel;
run;
proc sgplot data=freq;
title height=10pt "cum_freq needle plot of data from Proc FREQ output";
needle x=age y=cum_freq;
run;
对于在不同类别组中查看变量分布的情况,您可能希望升级到SGPANEL:
data work.have2;
do year = 2017, 2018;
do group = 'Team A', 'Team B', 'Team C';
do _n_ = 1 to 250;
personId + 1;
do until (18 <= age <= 95);
age = floor(6 + (32 + sqrt(95) * rannor(123)));
end;
output;
end;
end;
end;
run;
ods graphics / reset;
title;
proc sgpanel data=have2;
panelby year group / layout=lattice;
histogram age;
xaxis
run;
datawork.have2;
do年=2017年、2018年;
do组=‘A队’、‘B队’、‘C队’;
do=1至250;
personId+1;
直到(18仅使用这4个数据值,直方图如下所示:
绘图例程计算箱子的年龄范围和箱子中心的位置。计算是一些内部算法,您可以通过直方图语句选项/binstart=binwidth=nbins=
对其进行控制
当然,柱状图条是针对存储箱的,高度按存储箱中的值的相对计数进行缩放。y轴将是实际计数或计数百分比。您有4个值落在3个存储箱中,因此其中一个存储箱的计数为2(或50%=2/4)。最高值栏比最低值栏短,因为高值比低值少
当您有更多数据时会发生什么
这里有一些代码,创建了250个符合正态分布的值,并对它们进行了直方图分析,还显示了累积频率针图
data work.have;
do personid = 1 to 250;
do until (18 <= age <= 60);
age = floor(18 + (32 + sqrt(62) * rannor(123)));
end;
output;
end;
run;
proc freq noprint data=have;
table age / out=freq outcum; * data for needle plot;
run;
proc sgplot data=have;
title height=14pt "Default bins";
histogram age / showbins;
density age;
density age / type=Kernel;
run;
proc sgplot data=have;
title height=14pt "binstart=20 binwidth=2";
histogram age / showbins binstart=20 binwidth=2;
density age;
density age / type=Kernel;
run;
proc sgplot data=freq;
title height=10pt "cum_freq needle plot of data from Proc FREQ output";
needle x=age y=cum_freq;
run;
对于在不同类别组中查看变量分布的情况,您可能希望升级到SGPANEL:
data work.have2;
do year = 2017, 2018;
do group = 'Team A', 'Team B', 'Team C';
do _n_ = 1 to 250;
personId + 1;
do until (18 <= age <= 95);
age = floor(6 + (32 + sqrt(95) * rannor(123)));
end;
output;
end;
end;
end;
run;
ods graphics / reset;
title;
proc sgpanel data=have2;
panelby year group / layout=lattice;
histogram age;
xaxis
run;
datawork.have2;
do年=2017年、2018年;
do组=‘A队’、‘B队’、‘C队’;
do=1至250;
personId+1;
直到(18)你的问题很难理解。我认为你可能误解了直方图的y轴,或者你可能需要不同类型的绘图。如果你运行代码并在sashelp.class(或其他sashelp数据集之一)中制作身高或体重的直方图,它看起来像你期望的吗?是的,但在我的情况下,它不起作用。你能发布一个你的数据示例吗,可能是10-20条记录,其中直方图与你期望的不匹配?你能添加一张创建的输出图片吗?你在寻找累积频率图吗?@Richard是的,我只使用年龄作为示例。我做了一个不同的测试计算4个表并创建一个表,该表具有一个名为count的字段名和44、47、68和73的尊重值。您的问题很难理解。我认为您可能误解了直方图的y轴,或者您可能需要不同类型的绘图。如果您运行代码并在sashelp.class中生成身高或体重的直方图(或其他sashelp数据集之一),它看起来像你期望的吗?是的,但在我的情况下,它不起作用。你能发布一个你的数据示例吗,可能是10-20条记录,其中直方图与你期望的不匹配?你能添加一张创建的输出图片吗?你在寻找累积频率图吗?@Richard是的,我只使用年龄作为示例。我做了一个不同的测试对4个表进行计数,并创建了一个表,其中一个字段名为count,另一个字段名为44、47、68和73。这是一个非常可爱的表,但如果我想将其用于其他数据,请使用count->44、47、68、73。因为您给出的条件是年龄,但在没有像count这样的范围的情况下,是否有人可以将其范围从1到100?Y您可以仅使用箱数来控制年龄轴的范围直方图年龄/showbins binstart=0 nbins=50;
SGPLOT将计算轴tic标记数,以使其合理匹配。SGPLOT语句XAXIS min=max=
还控制绘制直方图的水平轴。好的,谢谢,但请您帮助我们o反映在你上面提供的答案中。感谢这是一个可爱的答案,但如果我想将其用于其他数据,请计数->44、47、68、73。因为你给出的条件是年龄,但在没有像计数那样的范围的情况下,有人能将其范围从1-100吗?你可以只使用箱数来控制年龄轴的范围histogram age/showbins binstart=0 nbins=50;
SGPLOT将计算轴tic标记编号,使其合理匹配。SGPLOT语句XAXIS min=max=
还控制绘制直方图的水平轴。好的,谢谢,但请您在上面提供的答案中反映出来。谢谢