从单个数据行创建饼图-SAS Analytics

时间:2019-04-10 11:12:23

标签: sas

我有一个数据集,该数据集包含一个产品变量,一个区域变量,然后是过去10年中的每一年作为一个单独的变量,因此该数据集总共有12个变量。

我无法弄清楚如何将数据从单行显示为饼图。

数据集看起来只是为了使其更易于可视化:

Product  Area  year1  year2  year3
  1       1     7      14      7  
  1       2     12     15      11
  1       3     5      9       8
  2       1     4      12      5
  2       2     8      3       14
  2       3     5      0       2
  3       1     2      12      12

我的最终结果是能够输入例如产品1和区域3,然后使它生成一个饼图,该饼图显示各年份的值。不过,我目前还无法找到一种解决方法,我目前的知识和研究表明,不可能从一行中拉出来吗?

1 个答案:

答案 0 :(得分:0)

  1. 首先将proc换位的year变量堆叠在一个列中;
  2. 然后使用BY Product Area;制作一个普通的饼图,以使每条原始行具有一个图表(假设Product * Area实际上是您行的唯一ID)。我在这里使用proc gchart

    *** DEFINE DATA --------------;
    data have;
        infile datalines dlm=' ';
        input Product  Area  year1  year2  year3;
        datalines;
    1 1 7 14 7
    1 2 12 15 11
    1 3 5 9 8
    2 1 4 12 5
    2 2 8 3 14
    2 3 5 0 2
    3 1 2 12 12
    ;run;
    
    *** STACK YEARS --------------;
    proc sort data=work.have out=work.tmp0temptableinput;
        by product area;
        run;
    proc sql;
        create view work.tt1 as
        select src.*, "values" as _eg_idcol_
        from work.tmp0temptableinput as src;
        quit;
    proc transpose data=work.tt1
            out=work.tt2
            name=year;
        by product area;
        id _eg_idcol_;
        var year:; * THIS IS GENERALISED FOR FOR THAN 3 YEARxx VARIABLES;
        run;
    proc datasets lib=work nolist;
        modify tt2;
        label values = ;
        label year = ;
        label valuedescription = ;
        run;
    
    *** PLOT --------------;
    proc sort
        data=work.tt2
        out=work.tt3;
        by product area;
        run;
    proc gchart data =work.tt3;
        pie  year /
            sumvar=values
            type=sum
            nolegend
            slice=outside
            percent=none
            value=outside
            other=4
            otherlabel="other"
            coutline=black
            noheading
            ;
        by product area;
        run; quit;