Создание графиков QQ, гистограмм и диаграмм рассеяния с использованием SAS

У меня есть этот набор данных:

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;

Я пытаюсь создать несколько разных графиков из этого набора данных.

Во-первых, я хочу создать график QQ, используя ODS, для переменной Health Awareness Index. Я использовал этот код, который делает то, что я хочу, но я чувствую, что он мог бы быть лучше:

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 лет. Будем признательны за любые подсказки или помощь.


person oxnot    schedule 07.12.2015    source источник


Ответы (1)


Их можно создать с помощью 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

Вы можете получить значения для QQ-графика, используя proc rank, а затем отобразив их с разбросом в 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;

Все это должно быть красиво оформлено с помощью заголовков, правильных цветов и т. д., но должно иметь хороший контур.

person Andrew Haynes    schedule 20.02.2017