使用SAS制作QQ图,直方图和散点图

时间:2015-12-07 18:38:54

标签: statistics sas histogram scatter ods

我有这个数据集:

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岁之间的男性。任何提示或帮助都将非常感激。

1 个答案:

答案 0 :(得分:0)

可以使用sgplotsgpanel

创建这些内容

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;

所有这些都需要通过标题,正确的颜色等来制作,但应该是一个很好的轮廓。