BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.

Consider this picture format:

proc format;
picture myqtr (default=6)
  low-high='%q%Y' (datatype=date)
;
run;

applied to this dataset:

data have;
infile datalines dlm="09"x;
input phase $ patients qtr :yymmdd10.;
format qtr myqtr.;
datalines;
I	5	2021-01-01	
I	10	2021-04-01	
I	14	2021-07-01	
I	8	2022-01-01	
II	20	2021-01-01	
II	30	2021-04-01	
II	66	2021-07-01	
II	55	2022-01-01	
III	60	2021-01-01	
III	70	2021-04-01	
III	78	2021-07-01	
III	67	2022-01-01
;

In the dataset, the dates show nicely as (e.g) Q12021

Now I run PROC SGPLOT:

proc sgplot data=have;
label
  patients = "Patients"
  qtr = "Quarter"
;
vline qtr / response=patients group=phase;
yaxis grid;
run;

and I get this:

SGPLOT1.png

Just the format string is used as value.

But when I change the format to a standard SAS format:

proc sgplot data=have;
format qtr yyq7.;
label
  patients = "Patients"
  qtr = "Quarter"
;
vline qtr / response=patients group=phase;
yaxis grid;
run;

I get this:

SGPLOT2.png

Does SGPLOT have an issue with custom formats?

1 ACCEPTED SOLUTION
5 REPLIES 5
Rick_SAS
SAS Super FREQ

From Googling this problem, it looks like others have reported similar behavior. See 

formatting - SAS proc sgplot with date axis formatted as m/d/yy (i.e. without leading zeros) - Stack...

 

First, I think you will have more success by keeping a native SAS format. Otherwise, the X axis doesn't know how to handle the spacing for the dates. Remove the FORMAT statement and use the

XAXIS valuesformat= 
option to supply a custom format.

 

Second, it looks like the VALUESFORMAT= option does not work with a PICTURE format, so unfortunately you cannot use

xaxis valuesformat=myqtr.;  /* does not work with PICTURE format */

I believe it works for other custom formats, but I have not tested it. Try creating your desired format by using a conventional VALUE statement in PROC FORMAT or by defining an FCMP function. 

 

Kurt_Bremser
Super User

Custom formats work, but not picture formats that use directives. I have not looked into this, but I suspect that the directive notation would interfere with the GTL syntax (the % character is the usual suspect here).

Kurt_Bremser
Super User

Native formats are no problem at all, but a user wanted to have a different notation of quarters that is not covered by a standard SAS format, see in this thread: https://communities.sas.com/t5/SAS-Programming/How-to-depict-quarters-of-the-year-on-the-x-axis/td-p... 

 

It would still be nice, though, to have all elements in SAS treat all formats the same, consistently. After all, it took me (and I'm no SAS newbie) considerable effort to find the reason for the non-function. And, IMHO, as a customer of SAS one would expect the software to be consistent throughout with the use of formats. I consider this expectance part of the big bucks people pay for SAS.

 

PS Da haben sich die Designer nicht mit Ruhm bekleckert.

("The designers did not exactly cover themselves with glory")

ballardw
Super User

I might suggest using a function created in FCMP to produce a string value for the target of a format.

Of course that adds another level of headache to code maintenance but the things we do for customers...

Ready to join fellow brilliant minds for the SAS Hackathon?

Build your skills. Make connections. Enjoy creative freedom. Maybe change the world. Registration is now open through August 30th. Visit the SAS Hackathon homepage.

Register today!
How to Concatenate Values

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.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 5 replies
  • 655 views
  • 5 likes
  • 3 in conversation