Создание круговой диаграммы из одной строки данных - аналитика SAS - PullRequest
1 голос
/ 10 апреля 2019

У меня есть набор данных, который состоит из переменной продукта, переменной области, а затем каждого года из последних 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 голосов
/ 10 апреля 2019
  1. Сначала сложите переменные года в один столбец с помощью proc transpose;
  2. Затем создайте обычную круговую диаграмму с BY Product Area;, чтобы иметь одну диаграмму на исходную строку (при условии, что Product * Area isна самом деле уникальный идентификатор для вас линий).Я использовал 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;
    
...