#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;