SAS: объединить два участка в один по группе - PullRequest
0 голосов
/ 26 марта 2019

У меня есть два участка, которые я хотел бы объединить в один.Каждый график представляет долю настоящих / не присутствующих наблюдений по соответствующим кумулятивным результатам испытаний за год

. Поэтому на графике я хотел бы видеть столбцы рядом для групп результатов испытаний, но подсчитывая количествоот настоящего к отсутствующему

Чтобы представить эту проблему, вот что я имею в настоящее время:

data test_scores;
    do i = 1 to 200;
        score = ranuni(200);
        output;
    end;
    drop i;
run;

data test_scores_2;
    set test_scores;
    if _n_ le 100 then flag = 0;
    else flag = 1;
run;

data test_scores_2_0 test_scores_2_1;
    set test_scores_2;
    if flag = 0 then output test_scores_2_0;
            else if flag = 1 then output test_scores_2_1;
run;

PROC GCHART 
    DATA=test_scores_2_0 
    ;
    VBAR 
    score
    /
    CLIPREF
    FRAME   
    LEVELS=20
    TYPE=PCT
    COUTLINE=BLACK
    RAXIS=AXIS1
    MAXIS=AXIS2
;
RUN;
QUIT;

PROC GCHART 
    DATA=test_scores_2_1
    ;
    VBAR 
    score
    /
    CLIPREF
    FRAME   
    LEVELS=20
    TYPE=PCT
    COUTLINE=BLACK
    RAXIS=AXIS1
    MAXIS=AXIS2
;
RUN;
QUIT;

бары должны составлять до 100% для существующих баров должны составлять до 100% для неподарок

TIA

Ответы [ 2 ]

1 голос
/ 27 марта 2019

С Proc GCHART вы можете использовать VBAR опции GROUP= и G100, чтобы получить бары, представляющие проценты внутри группы. Это полезно, когда группы имеют разное количество.

Опция SUBGROUP= разбивает вертикальную черту в соответствии с различными значениями переменной подгруппы и создает автоматическую окраску и условные обозначения, соответствующие подгруппам.

Когда переменная SUBGROUP (или значения) соответствует 1: 1 группе, результатом является диаграмма с другим цветом для каждой группы и легенда, соответствующая группе.

Например, измените ваши данные, чтобы в группе 1 было 50, а в группе 2 - 150:

data test_scores;
    do _n_ = 1 to 200;
        score = ranuni(200);
        flag = _n_ > 50;
        output;
    end;
run;

axis1 label=("score");
axis2 ;
axis3 label=none value=none;

PROC GCHART data=test_scores;
  VBAR score
  / levels=10

     GROUP=flag    G100
  SUBGROUP=flag

  SPACE=0 TYPE=PERCENT freq gaxis=axis3 maxis=axis1 ;
run;

выход

enter image description here

Аналогичная диаграмма, показывающая влияние переменной подгруппы со значениями, отличными от значений группы.

data test_scores;
    do _n_ = 1 to 200;

        subgroup = ceil(5 * ranuni(123));     * random 1 to 5;

        score = ranuni(200);
        flag = _n_ > 50;
        output;
    end;
run;

axis1 label=("score");
axis2 ;
axis3 label=none value=none;

PROC GCHART data=test_scores;
  VBAR score
  / levels=10

     GROUP=flag G100 
  SUBGROUP=subgroup   /* has integer values in [1,5] */

  SPACE=0 TYPE=PERCENT freq gaxis=axis3 maxis=axis1;
run;

enter image description here

1 голос
/ 26 марта 2019

proc sgplot на помощь.Используйте параметр group=, чтобы указать две отдельные группы.Установите прозрачность на 50%, чтобы одна гистограмма не покрывала другую.

proc sgplot data=test_scores_2;
    histogram score / group=flag transparency=0.5 binwidth=.05;
run;

enter image description here

...