【发布时间】:2018-11-19 16:20:14
【问题描述】:
我想生成一个“阶梯”图 (CDF),并尝试使用 dattrmap 选项更改线条颜色。但是颜色没有变化。以下是我的代码:
%MACRO ATRRMAP(fich=,var=);
proc freq data=&fich noprint;
tables &var/nocum nopercent norow nocol out=freq&var;
format _all_;
where &var^=.;
run;
data test;
set freq&var end=eof;
call symputx("mvCAT"||strip(_N_),&var);
if eof then call symputx("NB",_N_);
run;
data myattrmap;
length id $20 value 3 linecolor $10 pattern 3 fillcolor $20;
%do i=1 %to &NB;
id='myid';
value = &&mvCAT&i;
linecolor=cats("grey",put(&i*5,hex2.));
%if &i=1 or &i=5 or &i=9 %then %do;
pattern = 1;
%end;%else %if &i=2 or &i=6 or &i=10 %then %do;
pattern = 15;
%end;%else %if &i=3 or &i=7 or &i=11 %then %do;
pattern = 2;
%end;%else %if &i=4 or &i=8 or &i=12 %then %do;
pattern = 8;
%end;%else %do;
pattern = 41;
%end;
fillcolor=cats("grey",put(&i*5,hex2.));
output;
%end;
run;
%MEND ATRRMAP;
生成的数据如下所示:
id value pattern fillcolor
myid -6 1 CXbdc3c7
myid -5 2 CXbdc3c7
myid -4 8 CXbdc3c7
然后,我使用了 sgplot:
PROC SGPLOT DATA=cumul sganno=annotation 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;
与 sgplot 一起使用的数据 myfile 如下所示:
variable percent newgroup
-3.66 2.70 -6
-3.41 5.40 -6
-3.26 8.11 -6
-3.28 5.8 -5
-2.97 13.51 -5
我想要一个灰色渐变。但首先,我只想使用 dattrmap 在我的绘图上选择颜色线。我尝试使用填充颜色和线条颜色,但它不起作用。我尝试使用 styleattrs 的 datacontrastcolors 选项直接在 SGPLOT 语句中更改颜色,它可以工作。有人看到我错过了什么吗?
【问题讨论】:
-
宏调用在哪里,带参数?
-
@Reeza 这是 attrmap 宏调用:'%ATRRMAP(fich=myfile,var=myvar);'
-
将这些数据和一些示例数据添加到您的帖子中,我们可以对其进行测试,看看哪里出了问题。数据属性映射确实有效。有时您需要在 ODS GRAPHICS 语句上设置 attrpriority=none 选项,以强制它覆盖默认值。
-
谢谢@Reeza,我用一些数据线更新了我的帖子。另外,我尝试了 attrpriority 选项,但它不起作用:/
-
由于某种原因,您的代码将值转换为字符值。你也有这种情况吗?这可能是你的问题。
标签: colors sas cdf step sgplot