создание гистограммы для таблицы с одним столбцом в SAS - PullRequest
0 голосов
/ 05 марта 2019

У меня есть таблица с одним столбцом, и я хочу сгенерировать гистограмму на основе столбца таблицы.

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, но, к моему удивлению, даже самое высокое значение короче, чем самое низкое значение

1 Ответ

2 голосов
/ 05 марта 2019

Только с этими 4 значениями данных гистограмма выглядит следующим образом:

enter image description here

Подпрограмма построения графика вычисляет возрастной диапазон для бункеров и расположение центров бинов. Вычисление - это некоторый внутренний алгоритм, который вы можете контролировать с помощью histogram параметров оператора / 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;

enter image description here

Еще пример кода, демонстрирующий эффекты nbins и xaxis

ods graphics / reset width=500px height=250px imagemap;
proc sgplot data=have;
    title  height=12pt "binstart=0 nbins=25";
    title2 height=12pt "xaxis min=0 max=100";
    histogram age / showbins binstart=0 binwidth=2 nbins=50;
    density age;
    density age / type=Kernel;
    xaxis min=0 max=100;
run;

proc sgplot data=have;
    title  height=12pt "binstart=0 nbins=10";
    title2 height=12pt "xaxis min=-100 max=200";
    histogram age / showbins binstart=0 binwidth=2 nbins=50;
    density age;
    density age / type=Kernel;
    xaxis min=-100 max=200;
run;

enter image description here

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

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...