SGPLOT две оси Y - PullRequest
       6

SGPLOT две оси Y

0 голосов
/ 05 ноября 2019

У меня есть набор данных, который выглядит следующим образом:

  pt_fin    Admit_Type    MONTH_YEAR   BED_ORDERED_TO_DISPO (minutes)
     1        Acute             Jan              214
     2        Acute             Jan              628
     3        ICU               Jan              300
     4        ICU               Feb               99

У меня уже есть код (см. Ниже), который создает график с топором (допустим, тип сгруппирован по моему месяцу) и осями y (срединная кровать)время), но я хочу добавить вторичные оси Y, которые подсчитывают количество пациентов, которые были использованы для вычисления каждой соответствующей медианы.

Например, я хочу получить вторичную точку данных оси Y, которая соответствует месяцу и типу допуска, поэтому для января вторичная точка данных оси Y будет иметь 2 отдельных счета 1) пациентов, поступивших в остроеи 2) пациентов, поступивших в ОРИТ.

 proc sgplot data=Combined;
 title "Median Bed Order To Dispo By Month, Admit Location"; 
 vbar MONTH_YEAR   / response=BED_ORDERED_TO_DISPO stat=median
 group = Admit_Type groupdisplay=cluster ;
 run; 

Я пытался адаптировать то, что нашел здесь, но графики, которые создает мой код, очень грязные и неправильные.

https://blogs.sas.com/content/iml/2019/01/14/align-y-y2-axes-sgplot.html

Желаемыйвывод (представьте, что X и *, соответственно, соединены в линейный график, соответствующий оси Y):

     |        *                      |
  m  |   |    |              X   |   | #
  e  |   x    |              |   *   |
  d  |   |    |              |   |   |
     |-------------------------------|
      Acute ICU           Acute ICU  
        Jan                FEb

Код, который я пробовал, который производит мусор

proc sgplot data=Combined;
vbarbasic MONTH_YEAR/ response=Bed_Order_Hour y2axis; /*needs to be on y axis 1*/
group = Admit_Type
series x=MONTH_YEAR y=Pt_fin/ markers; *Pt_fin needs to be on y axis 2*/
run;

1 Ответ

1 голос
/ 06 ноября 2019

Ваше объяснение визуализации слабое. Вы могли бы хотеть использовать два оператора построения в ваших SGPLOT, VBAR и VLINE.

data have;
  do type = 'Acute', 'ICU';

    do month = '01jan2018'd to '31dec2018'd;

      do _n_ = 1 to floor (50 * ranuni(123));

        patid + 1;
        minutes = 10 + floor(1000 * ranuni(123));

        output;
      end;

      month = intnx ('month', month, 0, 'e');
    end;
  end;

  format month monname3.;
run;

ods html5 file="plot.html" path="c:\temp";

proc sgplot data=have;
  title "Median of patient minutes by month";
  vbar  month / group=type groupdisplay=cluster response=minutes stat=median;
  vline month / group=type groupdisplay=cluster response=minutes stat=freq y2axis ;
run;

ods html5 close;

enter image description here

vline представляет зрителю вторичный фокус на частоте для каждой медианы. Та же самая информация (как аспект) медианы могла бы быть передана вместо этого только с изменением интенсивности vbar. Самые высокие полосы частот (из медианы) будут иметь «самый сильный» оттенок, а нижние «частоты» будут затухать.

...