Наложение среднего тренда на тренды по группам с помощью Proc sgplot

#sas #visualization

Вопрос:

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

 proc sgplot data=have ;
vline year/response=disease_rate group=sex stat=mean datalabel=disease_rate  ;
yaxis values=(0,1)  label="Percentage";
run; 
 

Комментарии:

1. Я думаю, что если вы хотите, чтобы на вашем графике были разные уровни обобщения, вам, к сожалению, необходимо предварительно обобщить данные вашего графика. Является ли disease_rate переменной 0/1?

2. Переменная болезни является двоичной, но показатель заболеваемости-это процент, число от нуля до единицы. Каков был бы наилучший способ предварительного обобщения данных графика? Спасибо!

3. Я опубликовал ответ ниже, надеюсь, вы сможете скорректировать его по мере необходимости.

Ответ №1:

Вот пример его обобщения, а затем отображения на графике. Есть более чем один способ сделать это, хотя это всего лишь один.

 data have;
set sashelp.heart(in=a);
year=round(2021-ageAtStart, 10);
disease_rate= status="Dead";
run;

proc means data=have mean noprint;
class sex year;
types sex sex*year;
var disease_rate;
output out=summary_stats mean=average_value;
run;

proc sort data=summary_stats;
by sex year;
run;


data graph_data;
merge summary_stats(where=(_type_=2) rename=average_value=mean_sex_year)
      summary_stats(where=(_type_=3) rename=average_value = mean_sex);
by sex;
format mean_sex: percent12.1;
run;



proc sgplot data=graph_data ;
*where year > 1990;
vline year/response=mean_sex_year group=sex stat=mean datalabel=mean_sex_year  ;
vline year/response=mean_sex group=sex stat=mean datalabel=mean_sex  ;

run; 
 

Комментарии:

1. Спасибо за код. Это дает мне сюжет с контрольной линией для каждого пола отдельно. Но я хочу добавить среднюю линию тренда, которая показывает общую тенденцию к конкретным сексуальным тенденциям. Что-то вроде vline year/response=disease_rate stat=mean datalabel=disease_rate ; того , что представляет собой vline без группы=секс, который должен быть добавлен в код. В принципе, я бы хотел, чтобы общая тенденция и сексуальные тенденции были объединены в одном сюжете.

2. Измените операторы TYPES в PROC, чтобы указать, какие уровни/группировки вы хотите, а затем выполните _TYPE_ шаг/объединение данных, чтобы получить общее значение. Я не думаю, что есть простой способ сделать это в целом в SGPLOT, если это то, что вы ищете. Я не думаю, что вы можете легко выполнять разные уровни в заявлениях.

3. Спасибо за ваши предложения, Риза!

Ответ №2:

Используйте series вместо vline этого, чтобы вы могли наложить регрессию поверх нее, чтобы получить среднюю линию тренда. Например:

 proc sql;
    create table have as
        select date
             , region
             , sum(sale) as sale
        from sashelp.pricedata
        group by region, date
        order by region, date
    ;
quit;

proc sgplot data=have;
    series x=date y=sale / group=region;
    reg    x=date y=sale / group=region;
    xaxis fitpolicy=rotatethin;
run;
 

введите описание изображения здесь