SGPLOT两个Y轴

时间:2019-11-05 16:34:56

标签: sas

我有一个类似于以下内容的数据集:

#include "zachos.h"

/*
I'm pretty sure you know what this function is.
*/
int main(int argc, char* argv[]) {
    // Seed the random number generator
    std::srand(static_cast<unsigned int>(std::time(nullptr)));

    // Implement Mainframe for shorthand
    using zachos::Mainframe;
    // set GLFW error callback function
    glfwSetErrorCallback(zachos::errorCallback);

    // Run the window initiazation function
    int value = Mainframe::init();
    if (!value) {
        // Return if failed
        return value;
    }

    // Main loop
    while (!Mainframe::shouldClose()) {
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glEnable(GL_DEPTH_TEST);
        glDepthFunc(GL_LESS);

        glfwPollEvents();

        // Actually does the hard work
        Mainframe::draw();
    }

    glfwTerminate();

    return zachos::SUCCESS;
}

我已经有一个代码(请参阅下文),该代码可以生成带有ax(将我的月份分组的许可类型)和y轴(床位到分配时间的中位数)的图表,但是我想添加第二个Y轴来计算用于计算每个中位数的患者。

例如,我想要一个对应于月份和入院类型的次要Y轴数据点,因此对于Jan,次要Y轴数据点将有2个单独的计数1)接受急性治疗的患者和2)入ICU的患者中。

  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

我一直在尝试调整我在这里找到的内容,但是我的代码产生的图太混乱而且不正确。

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

所需的输出(分别在X线和*线之间假装与Y轴相对应的线形图):

 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; 

我尝试过产生垃圾的代码

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

1 个答案:

答案 0 :(得分:1)

您的可视化解释很弱。您可能想在SGPLOTVBARVLINE中使用两个绘图语句。

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强度来传达中位数的相同信息(作为一个方面)。 (中位数的)最高频率条将是“最强”阴影,而较低的“频率”条将被淡化。