Using Proc GPLOT I have a line graph showing number of prescriptions by drug type over several years. Each graph is recreated for each state.
However, I can't seem to get the colors to remain consistent for each drug when I replicate the graph for each state.
Is there anyway to indicate if the drug='Ibuprofen' then the line color should be green, etc. I can't seem to find an option to do that.
Here's the code I used:
%_eg_conditional_dropds(WORK.SORTTempTableSorted); SYMBOL1 INTERPOL=JOIN HEIGHT=10pt VALUE=NONE LINE=1 WIDTH=2 CV = _STYLE_ ; SYMBOL2 INTERPOL=JOIN HEIGHT=10pt VALUE=NONE LINE=1 WIDTH=2 CV = _STYLE_ ; SYMBOL3 INTERPOL=JOIN HEIGHT=10pt VALUE=NONE LINE=1 WIDTH=2 CV = _STYLE_ ; Legend1 FRAME ; Axis1 STYLE=1 WIDTH=1 MINOR=NONE ; Axis2 STYLE=1 WIDTH=1 MINOR=NONE ; PROC SQL; CREATE VIEW WORK.SORTTempTableSorted AS SELECT statecd, hcv_rc ,Year_qtr , SUM(num_presc) AS num_presc_SUM FROM HCV.HCVX GROUP BY statecd, hcv_rc,Year_qtr ORDER BY statecd, hcv_rc,Year_qtr; QUIT; PROC GPLOT DATA = WORK.SORTTempTableSorted; PLOT num_presc_SUM * Year_qtr =hcv_rc / VAXIS=AXIS1 HAXIS=AXIS2 FRAME SKIPMISS LEGEND=LEGEND1 ; by statecd; RUN; QUIT;
The best way to do this is to use PROC SGPLOT with an attributes map. If you look at pages 8-9 of my paper (see the link below), you will see an example this. For your case, your code will look something like this:
data attrmap; retain id "myid"; length linestyleelement $ 10 markerstyleelement $ 10; input value $ linestyleelement $ markerstyleelement $; cards; drug1 GraphData1 GraphData1 drug2 GraphData2 GraphData2 drug3 GraphData3 GraphData3 ; run; proc sgplot data=work.SORTEDTempTableSorted dattrmap=attrmap; series x=year_qtr y=num_presc_sum / group=hcv_rc attrid=myid; run;
Hope this helps!
Some times it helps to make sure that all values of your grouping variables such as hvc_rc appear within others (your statecd) even if the Y value is missing.
The attributes is preferred but if you stick with GPLOT or have an older version of SAS such as 9.2 then the added value will help, especially when sorted.
Here ar two more resources with examples:
Registration is open! SAS is returning to Vegas for an AI and analytics experience like no other! Whether you're an executive, manager, end user or SAS partner, SAS Innovate is designed for everyone on your team. Register for just $495 by 12/31/2023.
If you are interested in speaking, there is still time to submit a session idea. More details are posted on the website.
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.