/**********************************************************************/


   /* loop through, generating 101 characters              */
do i=0 to 100;
   char=input(put(i,hex2.),$2.);

   /* segment 1 is a filled polygon                        */
   /* representing the fill level for the character        */
segment=1;
lp='p';                    /* segment is a polygon         */
x=0; y=0; output;          /* lower left at 0,0            */
y=i;      output;          /* upper left is fill level     */
x=50;     output;          /* upper right                  */
y=0;      output;          /* lower right                  */
x=0;      output;          /* lower left                   */

   /* segment 2 is an empty rectangle, forming the         */
   /* outline of the gauge                                 */
segment=2;
lp='l';           /* line segments, not a polygon          */
y=0;   output;    /* start at bottom of gauge              */
y=100; output;    /* upper left at top of gauge            */
x=50;  output;    /* upper right                           */
y=0; output;      /* lower right                           */
x=0;   output;    /* lower left                            */

   /* segment 3 is a tick mark on left side of gauge       */
   /* at 50 percent                                        */
segment=3;
y=50;  output;
x=-10;  output;

   /* segment 4 is a tick mark on right side of gauge      */
   /* at 50 percent                                        */
segment=4;
x=60;  output;
x=50;  output;
end;
run;


/**********************************************************************/


libname gfont0 '
                /*  SAS-data-library */
                                       ';
proc gfont data=font name=gauge filled nokeymap 
           codelen=2 height=3.5;
   title 'GAUGE Font';
run;


/**********************************************************************/


data ratio;
   input staten $ ratio;
   state=stfips(staten);   /* convert postal code          */
                           /* to fips code                 */

   cards;
ks  6.0
mo  56.2
ne  44.9
ia  27.9
co  32.2
ut  41.6
wy  49.4
nd  48.2
sd  83.6
mt  62.7
mn  28.6
id  40.4
mi  39.2
il  62.8
in  36.1
oh  39.3
wi  45.7
;


/**********************************************************************/


proc sort;
   by state;
run;


/**********************************************************************/


data anno;
   length color $ 8;
   merge maps.uscenter ratio(in=inr);
   by state;
   if inr;            /* select only states in response    */
                      /* data set                          */

   xsys='2';
   ysys='2';          /* use data coordinate system        */
   function='label';  /* draw gauges using text            */
   style='gauge';     /* use the gauge font to draw gauges */
   when='a';          /* draw gauges on top of map         */
   position=Õ5Õ;      /* center gauge at X-Y location      */
   text=input(put(round(ratio,1),hex2.),$2.);
                      /* choose character based            */
                      /* on value of RATIO                 */
   color='black';
   size=5;
keep color state x y xsys ysys function
     when size position text style;
run;


/**********************************************************************/


title h=8 pct  f=swissb 'Debt to Revenue Ratio';
title2 f=swiss h=5 pct 'For Central and Mountain States';
footnote box=2 h=3.5 pct f=gauge '00' f=swissl   ' = 0%   '
                         f=gauge '32' f=swissl  '  = 50%  '
                         f=gauge '64' f=swissl  '  = 100% ';
footnote2 h=3 pct f=swiss j=l '         SAS/GRAPH'
          m=(+0,+.5) '02'x m=(+0,-.5) ' Software';
pattern v=s c=grayee r=17;

proc gmap data=ratio map=maps.us all;
   id state;
   choro state / nolegend       /* suppress GMAP legend    */
                 coutline=black /* outline states in black */
                 cempty=black
                 annotate=anno;
run;


/**********************************************************************/