Hi All,
I'm trying to use Attrmap and a proc format but they seem to cancel each other over.
If I run the code without the format Simplification typeFmt. I get the green from the Attrmap - as expected - and legend = 0 (pic 1).
If I run with format Simplification typeFmt. I loose the formatting from Attrmap and the legend = Pre trial (pic2)
Is there a way I can have both - Attrmap and the proc format work together. Green columns from the Attrmap and a legend shows Pre trial and Post Trial.
Data Attrmap;
Retain id "myid";
input value $ fillcolor $8.;
datalines;
0 VIBG
1 BIBG
;
run;
proc format;
value typeFmt
0 = "Pre Trial"
1 = "Post Trial"
;
ods graphics on / width=9in height=5in;
Proc SGPLOT data=work.DSCMax noborder dattrmap=attrmap;
*/
format Simplification typeFmt.;
VBAR EVENT_DT / Response=Max_answer_tm Group=Simplification attrid=myid nooutline seglabel seglabelattrs=(weight=Bold color=WHITE size=8 );
yaxis display=(noline noticks) grid values=(0 to 3600 by 300) offsetmin=0 label='mm:ss';
RUN;
ODS graphics OFF;
Apologies if the test data doesn't run - this is what it looks like though
data test;
Input CD EVENT_DT Group Simplification MAX_ANSWER_TM;
Datalines;
TSDa 2018-07-06 DSC 0 38:21
TSDa 2018-07-09 DSC 0 9:41
TSDa 2018-07-10 DSC 0 23:31
TSDa 2018-07-11 DSC 0 14:47
TSDa 2018-07-12 DSC 0 17:40
TSDa 2018-07-13 DSC 0 20:34
TSDa 2018-07-16 DSC 0 8:55
TSDa 2018-07-17 DSC 0 22:17
TSDa 2018-07-18 DSC 0 16:42
TSDa 2018-07-19 DSC 0 10:31
TSDa 2018-07-20 DSC 0 11:12
TSDa 2018-07-23 DSC 0 10:13
TSDa 2018-07-24 DSC 0 6:37
TSDa 2018-07-25 DSC 0 17:00
TSDa 2018-07-26 DSC 0 7:11
TSDa 2018-07-27 DSC 0 10:43
;
RUN;
Pic 1 Pic 2
Hi @DME790,
According to the documentation: "If the group value is formatted, then the text-string in the attribute map data set must contain the formatted value."
So, just modify variable VALUE in dataset ATTRMAP:
data test;
input cd $ event_dt :yymmdd. group $ Simplification max_answer_tm :time.;
max_answer_tm=max_answer_tm/60;
format event_dt yymmdd10. max_answer_tm mmss.;
label event_dt='Event Date';
datalines;
TSDa 2018-07-06 DSC 0 38:21
TSDa 2018-07-09 DSC 0 9:41
TSDa 2018-07-10 DSC 0 23:31
TSDa 2018-07-11 DSC 0 14:47
TSDa 2018-07-12 DSC 0 17:40
TSDa 2018-07-13 DSC 0 20:34
TSDa 2018-07-16 DSC 0 8:55
TSDa 2018-07-17 DSC 0 22:17
TSDa 2018-07-18 DSC 0 16:42
TSDa 2018-07-19 DSC 0 10:31
TSDa 2018-07-20 DSC 0 11:12
TSDa 2018-07-23 DSC 0 10:13
TSDa 2018-07-24 DSC 0 6:37
TSDa 2018-07-25 DSC 0 17:00
TSDa 2018-07-26 DSC 0 7:11
TSDa 2018-07-27 DSC 0 10:43
TSDa 2018-07-27 DSC 1 -0:01
; /* last obs. added to force "Post Trial" into the legend */
data attrmap;
retain id "myid";
input value :&$10. fillcolor $8.;
datalines;
Pre Trial VIBG
Post Trial BIBG
;
ods graphics on / width=9in height=5in;
proc sgplot data=test noborder dattrmap=attrmap;
format Simplification typeFmt.;
vbar event_dt / response=max_answer_tm group=Simplification attrid=myid nooutline seglabel seglabelattrs=(weight=bold color=white size=8 );
yaxis display=(noline noticks) grid values=(0 to 3600 by 300) offsetmin=0 label='mm:ss';
run;
ods graphics off;
If you don't need "Post Trial" in the legend if only "Pre Trial" values occur in the graph, just delete the dummy observation that I've added.
Hi @DME790,
According to the documentation: "If the group value is formatted, then the text-string in the attribute map data set must contain the formatted value."
So, just modify variable VALUE in dataset ATTRMAP:
data test;
input cd $ event_dt :yymmdd. group $ Simplification max_answer_tm :time.;
max_answer_tm=max_answer_tm/60;
format event_dt yymmdd10. max_answer_tm mmss.;
label event_dt='Event Date';
datalines;
TSDa 2018-07-06 DSC 0 38:21
TSDa 2018-07-09 DSC 0 9:41
TSDa 2018-07-10 DSC 0 23:31
TSDa 2018-07-11 DSC 0 14:47
TSDa 2018-07-12 DSC 0 17:40
TSDa 2018-07-13 DSC 0 20:34
TSDa 2018-07-16 DSC 0 8:55
TSDa 2018-07-17 DSC 0 22:17
TSDa 2018-07-18 DSC 0 16:42
TSDa 2018-07-19 DSC 0 10:31
TSDa 2018-07-20 DSC 0 11:12
TSDa 2018-07-23 DSC 0 10:13
TSDa 2018-07-24 DSC 0 6:37
TSDa 2018-07-25 DSC 0 17:00
TSDa 2018-07-26 DSC 0 7:11
TSDa 2018-07-27 DSC 0 10:43
TSDa 2018-07-27 DSC 1 -0:01
; /* last obs. added to force "Post Trial" into the legend */
data attrmap;
retain id "myid";
input value :&$10. fillcolor $8.;
datalines;
Pre Trial VIBG
Post Trial BIBG
;
ods graphics on / width=9in height=5in;
proc sgplot data=test noborder dattrmap=attrmap;
format Simplification typeFmt.;
vbar event_dt / response=max_answer_tm group=Simplification attrid=myid nooutline seglabel seglabelattrs=(weight=bold color=white size=8 );
yaxis display=(noline noticks) grid values=(0 to 3600 by 300) offsetmin=0 label='mm:ss';
run;
ods graphics off;
If you don't need "Post Trial" in the legend if only "Pre Trial" values occur in the graph, just delete the dummy observation that I've added.
Save $250 on SAS Innovate and get a free advance copy of the new SAS For Dummies book! Use the code "SASforDummies" to register. Don't miss out, May 6-9, in Orlando, Florida.
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.