graph - SAS 条形图测量不同变量的百分比(一个变量在 y 轴上测量,另一个通过条内的阴影显示)

标签 graph sas grouping bar-chart percentage

我以前问过这个问题,但还没有找到答案。我正在尝试在 SAS 中创建一个条形组,它按类别显示接受测试的患者百分比,并在条形内显示接受测试的位置(位置)。我的数据集如下所示:

Category            Test        Test_location
High Risk           1           Site 1
Intermediate Risk   1           Site 2
Low Risk            0           .
Intermediate Risk   0           .
High Risk           1           Site 3

每个患者都列出了他们被分配到的风险分类(变量“类别”),指示变量显示他们是否接受了测试(变量“测试”,其中“1”=接受测试和“0'= 没有接受测试),如果他们接受了测试,则表示测试发生的地点(变量“test_location”)。

我想创建一个条形图,其中 x 轴上的类别和 ya 轴显示接受测试的患者百分比(测试 = 1),然后每个 strip 阴影以显示接受测试的患者的构成在每个位置类别中(即:站点 1、2 和 3 中发生了多少测试)。

我有下面的代码,但它没有给我想要的百分比。它给了我 test*category 的 pct_col 输出,我想要 pct_row。换句话说,我希望 y 轴衡量接受测试的患者占每个类别患者总数的百分比,而不是像它给我的那样在接受任何类别测试的所有患者中的百分比。

我想要的示例:在下面的虚拟数据集中,例如,对于高风险患者,我想要一个显示 75%(总共 16 名高风险患者中有 12 名接受测试的患者)接受测试的条形图,然后有阴影的条形图显示 41.66% 的测试在站点 1,33.34% 在站点 2,25% 在站点 3。对于中等和低风险类别,依此类推。如果有一种方法可以用确切的百分比来标记小节,那也很好。

虚拟数据集:

data test;
infile datalines missover;
   input ID Category $ Test Test_location $;
   datalines;
1 High 1 Site_1
2 High 1 Site_1
3 High 1 Site_1
4 High 1 Site_1
5 High 1 Site_1
6 High 1 Site_2
7 High 1 Site_2
8 High 1 Site_2
9 High 1 Site_2
10 High 1 Site_3
11 High 1 Site_3
12 High 1 Site_3
13 High 0
14 High 0
15 High 0
16 High 0
17 Intermediate 1 Site_1
18 Intermediate 1 Site_1
19 Intermediate 1 Site_2
20 Intermediate 0
21 Intermediate 0
22 Intermediate 0
23 Intermediate 0
24 Intermediate 0
25 Intermediate 0
26 Low 1 Site_1
27 Low 1 Site_1
28 Low 1 Site_1
29 Low 1 Site_2
30 Low 1 Site_2
31 Low 1 Site_2
32 Low 1 Site_3
33 Low 0
34 Low 0
35 Low 0
36 Low 0
37 Low 0
38 Low 0
;

谢谢!

编辑;

这是我希望在 SAS 中输出的示例图(使用上面的虚拟数据): enter image description here

使用这段代码:

proc sgplot data=test pctlevel=graph;
    vbar category / response=test stat=percent
        group=test_location groupdisplay=stack datalabel;
    keylegend /title="Testing Location" position=bottom;
quit;

我得到这个输出: enter image description here

所以我没有给出正确的百分比分母。我也想不出一种方法来标记图表的各个子部分,就像我在示例图中所做的那样。

谢谢!

最佳答案

您可以通过使用一些数据步骤和一些格式来准确获得您想要的内容。它与您的工作代码有点不同。正如其他人指出的那样,Robert Allison's site. 中有许多有用的示例。

我会选择下面的简单解决方案,它几乎正是您所要求的,并且非常接近您的工作代码。主要区别在于缺失值属于它们自己的类别。

关键行是:

  • 使用pctlevel=group
  • 使用缺失

代码如下:

proc sgplot data = test 
    pctlevel = group
;
    vbar category / 
        stat       = percent
        group      = test_location 
        grouporder = data
        missing
        seglabel
    ;
    keylegend / 
        title    = "Testing Location" 
        position = bottom
    ;
quit;

我得到:

enter image description here

关于graph - SAS 条形图测量不同变量的百分比(一个变量在 y 轴上测量,另一个通过条内的阴影显示),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31255529/

相关文章:

sas - 我更改了列名称,但 SAS PROC REPORT 仍使用旧名称

sas - 从当前观察中读取下一个 k 观察

linux - 按字母顺序分组对文本文件进行排序 (Linux)

mysql - 如何根据一列的最大值从 MySQL 中选择行并将另外两列分组?

javascript - 如何使用轴标签实现多重向下钻取

python - 使用 Python 库生成有向图 任何 python 库

python - 查找具有 n 个节点的所有不同图(networkx)

database - 从密码查询中获取路径长度

arrays - 在 SAS 的 IF 语句中创建和使用列表

mysql - mysql中使用concat创建复合索引