Is it possible to use a picture format for the values a time axis?
In my test, it does not work.
proc format ;
picture monyyd (default=6) low - high = '%b-%y' (datatype=date);
run;
data class;
set sashelp.class;
if sex='M' then month='01MAR2024'd;
else month='01APR2024'd;
monthc=put(month,monyyd.);
run;
proc sgplot data=class;
vbarbasic monthc / response=height stat=mean;
run;
proc sgplot data=class;
vbarbasic month / response=height stat=mean;
xaxis values=('01MAR2024'd to '01APR2024'd by month)
type=time
interval=month
valuesformat=monyy5.;
run;
proc sgplot data=class;
vbarbasic month / response=height stat=mean;
xaxis values=('01MAR2024'd to '01APR2024'd by month)
type=time
interval=month
valuesformat=monyyd.;
run;
Mmm things seem odd indeed.
I conducted a few more tests, and the picture format seems to be misinterpreted.
proc format ;
picture monyyd (default=6) low - high = '%b-%y' (datatype=date);
run;
ods graphics on / width=5cm height=3cm;
data CLASS;
set SASHELP.CLASS;
if SEX='M' then MONTH='01MAR2024'd;
else MONTH='01APR2024'd;
MONTHC=put(MONTH,monyyd.);
run;
proc sgplot data=CLASS;
vbarbasic MONTHC / response=HEIGHT stat=mean;
run;
title 'format monyy.';
proc sgplot data=CLASS;
vbarbasic MONTH / response=HEIGHT stat=mean;
xaxis values = ('01MAR2024'd to '01APR2024'd by month)
type = time
interval= month;
format MONTH monyy.;
run;
title 'valuesformat monyy.';
proc sgplot data=CLASS;
vbarbasic MONTH / response=HEIGHT stat=mean;
xaxis values = ('01MAR2024'd to '01APR2024'd by month)
type = time
interval= month
valuesformat=monyy.;
run;
title 'format valuesformat monyy.';
proc sgplot data=CLASS;
vbarbasic MONTH / response=HEIGHT stat=mean;
xaxis values = ('01MAR2024'd to '01APR2024'd by month)
type = time
interval= month
valuesformat=monyy.;
format MONTH monyy.;
run;
title 'format monyyd.';
proc sgplot data=CLASS;
vbarbasic MONTH / response=HEIGHT stat=mean;
xaxis values = ('01MAR2024'd to '01APR2024'd by month)
type = time
interval= month;
format MONTH monyyd.;
run;
title 'valuesformat monyyd.';
proc sgplot data=CLASS;
vbarbasic MONTH / response=HEIGHT stat=mean;
xaxis values = ('01MAR2024'd to '01APR2024'd by month)
type = time
interval= month
valuesformat=monyyd.;
run;
title 'format valuesformat monyyd.';
proc sgplot data=CLASS;
vbarbasic MONTH / response=HEIGHT stat=mean;
xaxis values = ('01MAR2024'd to '01APR2024'd by month)
type = time
interval= month
valuesformat=monyyd.;
format MONTH monyyd.;
run;
I also tried with datetime values as the confusing
NOTE: Time axis can only support date time values. The axis type will be changed to LINEAR.
message implies, to no avail.
Another confusing message is
NOTE: Since no format is assigned, the numeric category variable will use the default of BEST6.
that appears even though a format is defined.
I'd contact tech support if no one answers here. This is strange.
Please keep this post updated if you do. 🙂
You can try this "workaround":
proc format ;
picture monyyd (default=6) low - high = '%b-%y' (datatype=date);
run;
data class;
set sashelp.class;
if sex='M' then month='01MAR2024'd;
else month='01APR2024'd;
monthc=put(month,monyyd.);
run;
%macro looper(d,n,f=best12.);
%do i = 0 %to &n.-1;
"%Sysfunc(intnx(month,&d.,&i.),&f.)"
%end;
%mend looper;
proc sgplot data=class;
vbarbasic month / response=height stat=mean;
xaxis
values=(%looper('01MAR2024'd,2))
VALUESDISPLAY=(%looper('01MAR2024'd,2,f=monyyd.))
;
run;
Bart
Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!
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.