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

Hi, I am having trouble using an existing Swimmer Plot program and changing it into a Spider Plot.

 

I'm not familiar with graphs and having trouble changing the y-axis from "one record per subject"  to "% change in lesion size from baseline"

 

Here is the original Swimmer's plot code below:

(I believe I have to change YVAR=_n_.   where "_n_" is the sequence # of each subject. And it's one subject per record).

I created a variable lespct1-lespct6, which is the "lesion percentage change from baseline". 

If I can somehow use that variable instead of "_n_" then I think the graphs should change, no?

 

Thanks in advance!

 

data final;
   set sw;
    YVAR = _n_;


   if ongoing= 1 then do;
      xongo= xtime + 0.25;
   end;
 *  if conrflag = 'Y' then
 *     xconrsp= -0.5 ;
 *  else xconrsp= . ;

  format dstage stage. ;
run;

 

data _null_;
   set final end=last;
   if last then do;
      call symput('viewmax', left(put(_n_,3.)));
      call symput('thickn',  left(put(int(250/_n_),3.)));
   end;
run;

proc print data=final;run;

title;
footnote;


*ODS output, set graph orientation, size, RTF file name;
OPTIONS nodate nonumber orientation=landscape papersize='LETTER' ;
ods graphics on / height=7.5 in width=9.5 in ;
ods listing close;
ods pdf file = "&output\&pgmname..pdf" NOGTITLE NOGFOOTNOTE style=tlout;

 


/*************** Output graphic template***********/
Proc TEMPLATE;
   define STATGRAPH gtl_graph;
   begingraph/BORDER=False;
 
   LAYOUT OVERLAY /
     YAXISOPTS = (DISPLAY=(LABEL) OFFSETMIN=0.1 OFFSETMAX=0.2 LABEL="Subjects Received Drug"
                  LABELATTRS=(FAMILY="Arial" WEIGHT=bold SIZE=11pt)
                  LINEAROPTS= (VIEWMIN=1 viewmax=%eval(&viewmax-3) TICKVALUESEQUENCE=(start=1 end=&viewmax INCREMENT=1)))
     XAXISOPTS = (OFFSETMIN=0.05 OFFSETMAX=0.05 LABEL="Drug Exposure (weeks)"
                  LABELATTRS=(FAMILY="Arial" weight=bold size=11pt) TICKVALUEATTRS=(COLOR=BLACK)
                  LINEAROPTS=(VIEWMIN=0 VIEWMAX=&maxweek TICKVALUESEQUENCE=(START=0 END=&maxweek      INCREMENT=weekint)));

 

              /******** draw swimmer lane bars*******/
 
  * barchart x=YVAR y=XTIME /Group=DSTAGE Name="TYP" BARWIDTH=0.6 BARLABEL=0 stat=sum orient=horizontal;

  VECTORPLOT  X=XTIME Y=yvar XORIGIN=0 YORIGIN=yvar/GROUP=DSTAGE
  DATATRANSPARENCY=0.4 ARROWHEADS=FALSE LINEATTRS=(PATTERN=1 THICKNESS=7 );
  SCATTERPLOT  X=eval(XTIME+999) Y=yvar/GROUP=DSTAGE  Name="TYP" DATATRANSPARENCY=0.3 MARKERATTRS=(SYMBOL=squarefilled SIZE=9) ;

 

etc....

1 ACCEPTED SOLUTION

Accepted Solutions
Jay54
Meteorite | Level 14

Your data appears quite complicated.  Here is a simple example on how to create such a Spider plot.

http://blogs.sas.com/content/graphicallyspeaking/2016/10/24/clinical-graphs-spider-plot/

 

View solution in original post

8 REPLIES 8
Jay54
Meteorite | Level 14

What is a "Spider Plot" supposed to look like?  Google shows some Radar Plots.  Is that what you want?  Please share some example images, and you full code with data so we can run the program and see what is happening.  Also, what Version of SAS are you using?

HitmonTran
Pyrite | Level 9

The happy faces in the code is suppose to be a ": )"

Jay54
Meteorite | Level 14

just running your data steps, fixed some typos.  However, macro variable &crdte is not found in:

xtime = round((min("&crdte"d, datepart(eosdat), datepart(eotdat)) - ex1dt)/7,0.1);

 

HitmonTran
Pyrite | Level 9
&crdte can be replaced with today's date : '21OCT2016'd. thanks!

xtime = round((min('21OCT2016'd, datepart(eosdat), datepart(eotdat)) - ex1dt)/7,0.1);
Jay54
Meteorite | Level 14

Your data appears quite complicated.  Here is a simple example on how to create such a Spider plot.

http://blogs.sas.com/content/graphicallyspeaking/2016/10/24/clinical-graphs-spider-plot/

 

HitmonTran
Pyrite | Level 9
so it looks like I I need to manipulate my data from one record per subject to multiple records per subject with one variable for "% change from baseline"?
Jay54
Meteorite | Level 14

You want to display the tumor size change from baseline for each subject over time.  This is called a SERIES plot, and needs multiple observations with (x,y) data, that are connected by line segments.  When you have multiple series in the data, you need a curve id (Group) which can be the Subject column.  Now, since you want to color each line by the response group classification (Complete Response, etc), you need to provide that classification as a separate option called GroupLC.  This idea is also sometimes also referred to as a "Speghetti Plot", 

HitmonTran
Pyrite | Level 9

Is there a way to change the color of the swimmer lanes?

And is there a way to add a second title to the legend outside the graphs?

sas-innovate-2024.png

Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.

Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.

 

Register now!

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
  • 8 replies
  • 3234 views
  • 2 likes
  • 2 in conversation