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


data andrew;                                         
   input @1 date mmddyy8. @11 time time5. @18 lat 4.1
         @24 long 4.1;                               
   cards;                                            
08/22/92  05:00  25.8  67.5                          
08/22/92  11:00  25.9  69.0                          
08/22/92  17:00  25.9  70.4                          
08/22/92  23:00  25.6  71.9                          
08/23/92  05:00  25.5  73.4                          
08/23/92  11:00  25.4  75.0                          
08/23/92  17:00  25.4  76.5                          
08/23/92  23:00  25.4  78.1                          
08/24/92  05:00  25.4  80.3                          
08/24/92  11:00  25.7  82.1                          
08/24/92  17:00  25.8  83.9                          
08/24/92  23:00  26.3  85.7                          
08/25/92  05:00  26.6  87.4                          
08/25/92  11:00  27.5  89.2                          
08/25/92  17:00  28.2  90.3                          
08/25/92  23:00  29.0  91.1                          
08/26/92  05:00  29.7  91.7                          
08/26/92  07:00  29.9  91.7                          
08/26/92  11:00  30.5  91.6                          
08/26/92  13:00  30.7  91.6                          
;                                                    
run;  


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


data latlong;                                               
   long=45;        /* starting point for longitude lines  */
   do i=1 to 14;                                            
      lat=0;                                                
      output;         /* top of line                      */
      lat=50; output; /* bottom of line                   */
      long=long+5;                                          
   end;                                                     
   lat=0;         /* starting point for latitude lines    */
   do i=1 to 8;                                             
      long=45;                                              
      output;          /* right side of line              */
      long=120; output; /* left side of line              */
      lat=lat+5;                                            
   end;                                                     
run;


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


data grid;                                                  
   length function style color $ 8;                         
   retain xsys ysys '2' hsys '3' color 'white'              
          line 2 size .3 when 'b' cont -1;                  
   set latlong;                                             
                                                            
      /* This equation converts longitude                 */
      /* and latitude from degrees to radians.            */
   x=long*arcos(-1)/180;                                    
   y=lat*arcos(-1)/180;                                     
   if mod(_n_,2)>0 then                                     
      function='move';     /* MOVE and DRAW with          */
   else function='draw';   /* alternating observations.   */
run;


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


data symbols;                                               
   length function style color $ 8;                         
   retain function 'label' xsys ysys '2' hsys '3'           
          color 'red'                                       
          line 2 size 7.5 when 'a' cont -1                  
          text 'L' style 'weather';                         
   set andrew;                                              
   x=long*arcos(-1)/180;  /* This equation converts the   */
   y=lat*arcos(-1)/180;   /* longitude and latitude       */
   output;                /* values from degrees to       */
                          /* radians.                     */
run;


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


data area;                                                  
                                                            
      /* 45 degrees minimum longitude                     */
   xmin=45*arcos(-1)/180;                                                                                                                                                                                                                                       
                                                            
      /* 120 degrees maximum longitude                    */
   xmax=120*arcos(-1)/180;                                  
                                                            
      /* 0 degrees minimum latitude ymin=0;               */
   ymin=0;

      /* 50 degrees maximum latitude                      */
   ymax=50*arcos(-1)/180;                                   
      set maps.worldmap;                                    
      if ((y>ymin and yxmin));                             
run;                                                                                                                                                                                                                                                            
 

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


data mapall;             
   set area grid symbols;
run;                     
 

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


proc gproject data=mapall out=myproj;
   id id;                            
run;                                 
 

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


proc means data=myproj min max noprint;         
   var x y;                                     
   output out=stats min=minx miny max=maxx maxy;
run;                                                                                                                                                                                                                                                            
 

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


data _null_;                                                
   set stats;                                               
                                                            
      /* calculate the range for x                        */
   xrange=maxx-minx;                                        
                                                            
      /* calculate the range for y                        */
   yrange=maxy-miny;                                        
                                                            
     /* calculate new maximum for x                       */
   newmaxx=maxx-(.15*xrange);                               
                                                            
     /* calculate new minimum for x                       */
   newminx=minx+(.15*xrange);                               
                                                            
     /* initialize macro variables for x                  */
   call symput('maxx',newmaxx);                             
   call symput('minx',newminx);                             
                                                            
     /* calculate new maximum for y                       */
   newmaxy=maxy-(.15*yrange);                               
                                                            
     /* calculate new minimum for y                       */                                                                                                                                                                                                    
   newminy=miny+(.15*yrange);                               
                                                            
     /* initialize macro variables for y                  */
   call symput('maxy',newmaxy);                             
   call symput('miny',newminy);                             
run;                                                                                                                                                                                                                                                            


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


proc gproject data=myproj out=clipped
     longmin=&minx longmax=&maxx     
     latmin=&miny latmax=&maxy       
     project=none;                   
   id id;                            
run; 


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


data anno map;                   
   set clipped;                  
   if cont=\- 1 then output anno;
   else output map;              
run;


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


data frame;                                   
   length function style color $ 8;           
   retain xsys ysys '2' hsys '3' color 'white'
          size .3 when 'a' line 0 style '1';  
   function='move'; x=&minx; y=&miny; output; 
   function='bar'; x=&maxx; y=&maxy; output;  
run;                                                                                                                                                                                                                                                            


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


data all;         
   set anno frame;
run;                                                                                                                                                                                                                                                            


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


title1 h=5pct a=-90 ' ';                         
                                                 
pattern1 v=solid c=green r=100;                  
proc gmap data=map  map=map;                     
   note h=5pct c=white move=(65,80)pct font=centb
               'The Path of'                     
        h=5pct c=white move=(61,75)pct font=centb
               'Hurricane Andrew'
        h=4pct c=white move=(62,70)pct font=centb
               '22AUG92 to 26AUG92';             
   id id;                                        
   choro cont / nolegend anno=all;               
run;                                             
quit;


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