我有这个数据集:
data flu;
input FluShotStatus age HealthAwareIndex gender;
datalines;
0 59 52 0
0 61 55 1
1 82 51 0
0 51 70 0
0 53 70 0
0 62 49 1
1 51 69 1
0 70 54 1
0 71 65 1
0 55 58 1
1 58 48 0
0 53 58 1
0 72 65 0
1 56 68 0
0 56 83 0
0 81 68 0
1 62 44 0
;
run;
我正在尝试从此数据集中生成多个不同的图。
首先,我想使用ODS为可变健康意识指数制作一个QQ地块。我已经使用了这个代码,它可以实现我的目标,但我觉得它可能会更好:
ods graphics on;
proc univariate data=Measures;
var Length Width;
qqplot;
title ‘QQ Plot for Health Awareness Index’;
ods graphics off;
run;
接下来,我想使用ODS为健康意识指数和男性受试者年龄制作散点图。我尝试过使用:
ods graphics on;
proc sgscatter data=flu;
plot HealthAwareIndex*weight
run;
ods graphics off;
我想知道怎么做,我只是无法想象你是如何在一个页面上生成单独的直方图?理想情况下,对于年龄在50到70岁之间的男性。任何提示或帮助都将非常感激。
答案 0 :(得分:0)
可以使用sgplot
和sgpanel
:
1)散点图(假设男性gender
为1):
ods graphics on;
proc sgplot data = flu(where = (gender= 1));
scatter x = age y=HealthAwareIndex;
run;
ods graphics off;
2)QQ情节
您可以使用proc rank
导出QQ图的值,然后使用scater在sgplot
中绘制它们。要获得QQ图的一行,您可以使用proc sql
获取比例和位置参数的值,然后在lineparm
语句中使用这些:
proc rank data=flu normal=blom out=haiQuant;
var healthawareindex;
ranks hai_Quant;
run;
** add line to plot;
proc sql;
select mean(HealthAwareIndex), std(HealthAwareIndex)
into :location, :scale
from flu;
quit;
proc sgplot data=haiQuant;
scatter x=hai_Quant y=HealthAwareIndex;
xaxis label="Normal Quantiles";
lineparm x = 0 y = &location slope = &scale;
run;
3)直方图
要在一个页面上显示多个图表,您可以使用与sgpanel
具有相似语法的sgplot
过程。使用panelby
语句更改面板之间的图表,这是使用FluShotStatus
的示例:
proc sort data = flu;
by gender;
run;
proc sgpanel data = flu;
panelby fss;
vbox HealthAwareIndex / category = gender;
run;
所有这些都需要通过标题,正确的颜色等来制作,但应该是一个很好的轮廓。