Это должна быть переменная GROUP =, которая является переменной, управляющей цветом, формой и узорами. Вы группируете свои переменные по NEWGROUP, а не по значениям. Вы можете создать прокси-сервер для этого, если вы этого хотите. Без более подробной информации о том, что вам нужно, я не уверен, как мы можем помочь вам найти обходной путь, но это объясняет, почему он не работает в данный момент.
Из документации:
Значения переменной VALUE являются действительными значениями группы данных. Эти значения чувствительны к регистру. Группа данных назначается в операторе графика с параметром GROUP =.
Предполагая, что вы хотите, чтобы линии различались по цвету на основе NEWGROUP, вот как вы можете изменить свой код. Обратите внимание, что я резко упростил ваш код, и были проблемы с тем, как вы указываете цвет - на данный момент я проигнорировал их и оставляю это на ваше усмотрение. В настоящее время значения жестко запрограммированы в макросе. Я бы также рекомендовал изменить часть if _n_
для использования функции MOD()
, поскольку у вас, похоже, есть какой-то шаблон в ваших данных. Это может не сработать, но стоит задуматься.
*create fake data;
data myfile;
input variable percent newgroup $;
cards;
-3.66 2.70 group1
-3.41 5.40 group1
-3.26 8.11 group1
-3.28 5.8 group2
-2.97 13.51 group2
;;;;
run;
*macro to create attribute map;
%MACRO ATRRMAP(fich=,var=);
proc freq data=&fich noprint;
tables &var/nocum nopercent norow nocol out=freq&var (drop=percent);
format _all_;
where not missing(&var);
run;
data myattrmap;
length id $20 value $20 linecolor $10 pattern 3 fillcolor $20;
set freq&var.;
id='myid';
value = &var.;
if _n_ =1 then
linecolor = 'CXbdbdbd';
else if _n_=2 then
linecolor = 'CX636363';
*linecolor=cats("grey",put(_n_*5,hex2.));
if _n_ in (1, 5, 9) then
pattern = 1;
else if _n_ in (2, 6, 10) then
pattern = 15;
else if _n_ in (3, 7, 11) then
pattern = 2;
else if _n_ in ( 4, 8, 12) then
pattern=8;
else pattern = 14;
fillcolor=cats("grey",put(_n_*5,hex2.));
output;
run;
%MEND ATRRMAP;
*create attribute map for newgroup;
%ATRRMAP(fich=myfile, var=newgroup);
*plot graph;
PROC SGPLOT DATA=myfile NOBORDER dattrmap=myattrmap;
STEP X=variable Y=percent/GROUP=newgroup attrid=myid;
YAXIS LABEL="Cumulative percentage of patients" VALUES=(0 TO 100 BY
10);
XAXIS LABEL=" " VALUES=(-4 to 4 by 0.5);
KEYLEGEND /TITLE=" " LOCATION=INSIDE POSITION=BOTTOMRIGHT ACROSS=1
DOWN=3 NOBORDER;
RUN;
Методы и правила для имен цветовых схем находятся здесь .