首页 文章

SAS条形图与百分比

提问于
浏览
0

我是SAS的新用户,因此非常感谢任何反馈 . 我正在尝试在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轴上的类别和y轴表示进行测试的患者百分比(测试= 1),每个条形图显示在站点1,2和3中发生了多少次测试 .

我有这个代码,但它给了我接受测试而不是百分比的患者的数量:

proc sgplot data=test;
vbar category / response=test
group=test_location groupdisplay=stack;
yaxis grid values=(0 to 100 by 10) label="Percentage of patients who received testing (%)";
label Category= "Risk Stratification"; 
keylegend /title="Testing Location" position=bottom;
quit;

我不认为proc sgplot有一个百分比统计,所以我尝试做一个proc freq,但我无法弄清楚如何准确地为我所有的变量做到这一点 .

谢谢你的帮助!

编辑;

我添加了百分比属性,如下面建议的海报,但它没有给我我想要的百分比(它给我一个pct_col输出test *类,我想要pct_row) . 下面的代码给出了我想要的百分比,但我还想添加test_location以在每个栏上显示每个位置的患者百分比 .

proc tabulate data=test_util out=freq1;
class category test;
tables category,test*rowpctn;
run;
proc sgplot data=Freq1;
    where test=1;
    vbar category / response=pctn_10;
quit;

我想要的例子:在下面的虚拟数据集中,对于高风险患者,例如,我想要一个显示75%(在16名高风险患者中有12名患者接受测试)的酒吧接受测试,然后有条阴影显示,这些测试的41.66%在站点1,站点2为33.34%,站点3为25% . 中等和低风险类别等等 . 如果有一种方法可以用精确的百分比来标记子部分,那也会很棒 .

虚拟数据集:

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
;

2 回答

  • 0
    proc sgplot data=mydata pctlevel=graph;
    vbar Category / response=Test stat=percent
    group=Test_location;
    run;
    
  • 0

    proc sgplot 确实有一个百分比统计,如果你添加到那一点(根据文档,无论如何;你可以试试看,以防它没有记录 . )

    如果没有,那么 proc freq 应该允许您创建 proc sgplotvbarparm 可以使用的值 . 你没有发布你的 proc freq 所以我还没试过,但环顾四周;例如,my MWSUG paper显示了这样做的一个例子(出于不同的原因,但结果大致相同) .

    这是一个完成工作的 tabulate - 可能比使用 freq 更容易 .

    proc tabulate data=have out=freq1;
    class category test test_location/missing;
    tables test_location,category,test*pctn;
    run;
    
    
    proc sgplot data=Freq1;
        where test=1;
        vbar category / response=pctn_000 group=test_location;
    quit;
    

相关问题