<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Generate a different number of random (or evenly distributed ) dots in every  polygons of a map? in Graphics Programming</title>
    <link>https://communities.sas.com/t5/Graphics-Programming/Generate-a-different-number-of-random-or-evenly-distributed-dots/m-p/168102#M6254</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi everyone,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I just stumbled on &lt;A href="http://demographics.coopercenter.org/DotMap/"&gt;this map&lt;/A&gt; and I'm curious if something similar could be achievable&amp;nbsp; using SAS for Canada.&amp;nbsp; There are &lt;A href="http://www12.statcan.gc.ca/census-recensement/2011/geo/bound-limit/bound-limit-2011-eng.cfm"&gt;Cartographic Boundary Files&lt;/A&gt; available for multiple geographies (Province, Census division, Census subdivision) and one could easily get population data for these geographies on CanSim.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Once I know how many white/nativesblacks/asians/hispanic people I have in each area, I would like to create a single dot on the map for each of them.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Question:&amp;nbsp; Is it possible to do that in SAS?&amp;nbsp; So far my best idea using the random approach would be as follow:&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;a)&amp;nbsp; Taking each region individually,&lt;/SPAN&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt; fin&lt;/SPAN&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;d it's minimum and maximum longitude/latitude and the total population P. &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;b)&amp;nbsp; Generate&amp;nbsp; 10*P points within that rectangle using&amp;nbsp; RANUNI &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;c)&amp;nbsp; Determine which points are indisde the region using PROC GINSIDE&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;d)&amp;nbsp; Keep P points that are inside the region.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;e) Randomly assign a race to each of the retained points.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;Any improvement would be very appreciated,&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;Cheers&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;Simon&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 19 Aug 2014 20:05:37 GMT</pubDate>
    <dc:creator>morglum</dc:creator>
    <dc:date>2014-08-19T20:05:37Z</dc:date>
    <item>
      <title>Generate a different number of random (or evenly distributed ) dots in every  polygons of a map?</title>
      <link>https://communities.sas.com/t5/Graphics-Programming/Generate-a-different-number-of-random-or-evenly-distributed-dots/m-p/168102#M6254</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi everyone,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I just stumbled on &lt;A href="http://demographics.coopercenter.org/DotMap/"&gt;this map&lt;/A&gt; and I'm curious if something similar could be achievable&amp;nbsp; using SAS for Canada.&amp;nbsp; There are &lt;A href="http://www12.statcan.gc.ca/census-recensement/2011/geo/bound-limit/bound-limit-2011-eng.cfm"&gt;Cartographic Boundary Files&lt;/A&gt; available for multiple geographies (Province, Census division, Census subdivision) and one could easily get population data for these geographies on CanSim.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Once I know how many white/nativesblacks/asians/hispanic people I have in each area, I would like to create a single dot on the map for each of them.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Question:&amp;nbsp; Is it possible to do that in SAS?&amp;nbsp; So far my best idea using the random approach would be as follow:&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;a)&amp;nbsp; Taking each region individually,&lt;/SPAN&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt; fin&lt;/SPAN&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;d it's minimum and maximum longitude/latitude and the total population P. &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;b)&amp;nbsp; Generate&amp;nbsp; 10*P points within that rectangle using&amp;nbsp; RANUNI &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;c)&amp;nbsp; Determine which points are indisde the region using PROC GINSIDE&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;d)&amp;nbsp; Keep P points that are inside the region.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;e) Randomly assign a race to each of the retained points.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;Any improvement would be very appreciated,&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;Cheers&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;Simon&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 19 Aug 2014 20:05:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Graphics-Programming/Generate-a-different-number-of-random-or-evenly-distributed-dots/m-p/168102#M6254</guid>
      <dc:creator>morglum</dc:creator>
      <dc:date>2014-08-19T20:05:37Z</dc:date>
    </item>
    <item>
      <title>Re: Generate a different number of random (or evenly distributed ) dots in every  polygons of a map?</title>
      <link>https://communities.sas.com/t5/Graphics-Programming/Generate-a-different-number-of-random-or-evenly-distributed-dots/m-p/168103#M6255</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I am including a dot map that randomly places points around a given centroid (think city location) that may give you some ideas. I downloaded this from a SAS site but don't remember which.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; /*+-------------------------------------------------------+&lt;BR /&gt;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SUGI 29 Sample&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;BR /&gt;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SAS MAPPING: Tips and tricks&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;BR /&gt;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;BR /&gt;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp; NAME: dotdensity.sas&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;BR /&gt;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp; TITLE: Simulate a dot-density map.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;BR /&gt;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; This example takes zipcode location data and |&lt;BR /&gt;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; finds the zipcode centroid location.&amp;nbsp; Then&amp;nbsp;&amp;nbsp; |&lt;BR /&gt;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; it randomizes the locations so that the&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;BR /&gt;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; same location doesn't fall at the same spot. |&lt;BR /&gt;&amp;nbsp;&amp;nbsp; | PRODUCT: GRAPH&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;BR /&gt;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;BR /&gt;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp; NOTES: Last Update 24FEB04&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;BR /&gt;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; This example outputs several ODS device types|&lt;BR /&gt;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dot size may need to change for different&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;BR /&gt;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ODS devices.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;BR /&gt;&amp;nbsp;&amp;nbsp; +-------------------------------------------------------+*/&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;%let name=dotdens;&lt;BR /&gt;filename odsout '.';&lt;BR /&gt;goptions reset=global ;&lt;BR /&gt;/** Sets goptions xpixels and ypixels **/&lt;BR /&gt;%inc '../setsize.sas';&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;/***********************************************************************/&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;/* Illness location by zipcode&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;/* Substitute your own zipcode based location data here.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;/***********************************************************************/&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;data address;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; infile 'zip.out';&lt;BR /&gt;&amp;nbsp;&amp;nbsp; length zip 5.;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; input zip ;&amp;nbsp; /*must have variable 'zip' for matching*/&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addr_data=1; /*unique var for separating data later*/&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;%macro ziplocation(indata,outdata,uniquevar,radians);&lt;BR /&gt;/*---------------------------------------------------------------------*/ &lt;BR /&gt;/* Find the x,y location of the zipcode centroid.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;/*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */ &lt;BR /&gt;/* Sort the data by zipcode and then&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;/* get the X,Y centroid location for the zipcode by merging with the&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;/* zipcode dataset.&amp;nbsp; This will give you more information than you want */&lt;BR /&gt;/* so you drop the records not in the original address data.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;/* Arguments:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;/*&amp;nbsp;&amp;nbsp; indata= input dataset with zipcode data to lookup x,y&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;/*&amp;nbsp;&amp;nbsp; outdata= output dataset created with location information&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;/*&amp;nbsp;&amp;nbsp; uniquevar= variable name used only in input data so you can&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;/*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; eliminate other data.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;/*&amp;nbsp;&amp;nbsp; radians= set to 1 if the map data has x,y in radians.&amp;nbsp; zipcode&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;/*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data is in lat/long degrees.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;/*---------------------------------------------------------------------*/&amp;nbsp;&amp;nbsp; &lt;BR /&gt;proc sort data=&amp;amp;indata; &lt;BR /&gt;&amp;nbsp; by zip;&lt;BR /&gt;run;&lt;BR /&gt;data temp(keep= zip &amp;amp;uniquevar x y city);&amp;nbsp; &lt;BR /&gt;&amp;nbsp; merge address sashelp.zipcode;&amp;nbsp; &lt;BR /&gt;&amp;nbsp; by zip;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;/***********************************************************************/&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;/* Now, drop the records that were not in the original data or&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;/* records that don't have a zipcode match. Adjust the lat/long to&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;/* match the map.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;/***********************************************************************/&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;data &amp;amp;outdata; &lt;BR /&gt;&amp;nbsp; set temp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (&amp;amp;uniquevar ^= . and x NE . AND y NE .) then do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; /*adjust lat/long degrees to radians, if needed*/&lt;BR /&gt;&amp;nbsp;&amp;nbsp; %if &amp;amp;radians %then %do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x=atan(1)/45 * x *-1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; y=atan(1)/45 * y;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt; /* put out a message for bad zipcodes */&lt;BR /&gt; else if (&amp;amp;uniquevar ^=. and x=.) then do; /* couldn't find zipcode*/&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; put "WARNING: Check zipcode " zip " because it wasn't located.";&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;run;&lt;BR /&gt;%mend;&lt;/P&gt;&lt;P&gt;%macro dot_density(indata,outdata,spread,dotsize,color,idvar);&lt;BR /&gt;/*----------------------------------------------------------------------*/&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;/* Create an annotate dataset with a randomized 'dot' a each location.&amp;nbsp; */&lt;BR /&gt;/* This simulates a dot-density map so that all dots at the same&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;/* location do not appear directly on top of each other.&amp;nbsp; The user&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;/* must adjust spread and dotsize for their map needs.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;/*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;/* Arguments:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;/* indata= input dataset; outdata= output dataset;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;/* spread= offset from center point in any direction.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;/* dotsize= size of dot for each value&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;/* color= color of dot;&amp;nbsp; idvar= variable to use in tooltip&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;/* Notes:&amp;nbsp; Dotsize and spread must change depending on the scale of the */&lt;BR /&gt;/*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Map, whether you are using degrees or radians and&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;/*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; the number of items you are showing. The dot size may also&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;/*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vary between different types of output (eg, Gif, Java, actx) */&lt;BR /&gt;/* Warning:&amp;nbsp; Dot-density maps (or dot maps) are not 'accurate' because&amp;nbsp; */&lt;BR /&gt;/* of the random nature of the map and only show patterns.&amp;nbsp; Accuracy is */&lt;BR /&gt;/* better when you are showing a smaller area and fewer items.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */ &lt;BR /&gt;/*----------------------------------------------------------------------*/&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;data &amp;amp;outdata;&lt;BR /&gt;&amp;nbsp; set &amp;amp;indata;&lt;BR /&gt;&amp;nbsp; length function style color $ 8 position $ 1 text $ 20 html $1024;&lt;BR /&gt;&amp;nbsp; retain xsys ysys '2' hsys '3' when 'a' text '' ;&lt;BR /&gt;&amp;nbsp; retain rotate 360 style 'solid' function 'pie' position '5';&lt;BR /&gt;&amp;nbsp; anno_flag=1; /*so we can separate the datasets later*/&lt;BR /&gt;&amp;nbsp; color=&amp;amp;color; &lt;BR /&gt;&amp;nbsp; size=&amp;amp;dotsize; &lt;BR /&gt;&amp;nbsp; spread=&amp;amp;spread;&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* create randomness around centroid so you can see more than one dot*/&lt;BR /&gt;&amp;nbsp; x=x- spread + (spread*2)*rannor(0);&lt;BR /&gt;&amp;nbsp; y=y- spread + (spread*2)*rannor(0);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* Create a tool-tip for the dot */&lt;BR /&gt;&amp;nbsp; html=&lt;BR /&gt;&amp;nbsp;&amp;nbsp; 'alt='||&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; quote(&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&amp;amp;idvar : "||trim(left(&amp;amp;idvar))||' '&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;BR /&gt;&amp;nbsp;&amp;nbsp; output;&lt;BR /&gt;run;&lt;BR /&gt;%mend;&lt;/P&gt;&lt;P&gt;/***********************************************************************/&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;/* Match zipcodes to an x,y location&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;/***********************************************************************/&amp;nbsp; &lt;BR /&gt;%ziplocation(address,zipxy,addr_data,1);&lt;/P&gt;&lt;P&gt;/***********************************************************************/&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;/* Create a 'dot-density' annotate dataset&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;/***********************************************************************/&amp;nbsp; &lt;BR /&gt;%dot_density(zipxy,dotanno,.0001,.1,'red',zip);&lt;/P&gt;&lt;P&gt;/***********************************************************************/&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;/* Reduce the size of the actual map data.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;/***********************************************************************/&amp;nbsp; &lt;BR /&gt;proc greduce data=maps.counties out=work.states;&lt;BR /&gt;&amp;nbsp; id state;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;/************************************************************************/&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;/* Keep only 3 counties in NC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&amp;nbsp;&amp;nbsp; &lt;BR /&gt;/************************************************************************/&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;proc sql;&lt;BR /&gt;&amp;nbsp; create table work.states as select * from work.states&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; where fipstate(state) EQ ('NC')&lt;BR /&gt; and (county=183 or county=85 or county=101)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; and density &amp;lt; 4&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;BR /&gt;quit; run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/***********************************************************************/&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;/* Combine the map and annotate Data to project it the same.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;/* Then split it apart again for display.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;/***********************************************************************/&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;data work.combined; /* combine data*/&lt;BR /&gt;&amp;nbsp; set work.states dotanno; &lt;BR /&gt;run;&lt;BR /&gt;/*project both datasets*/&lt;/P&gt;&lt;P&gt;proc gproject data=work.combined out=work.combined dupok;&lt;BR /&gt;&amp;nbsp; id state;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;/*split the data*/&lt;BR /&gt;data work.states dotanno;&lt;BR /&gt;&amp;nbsp; set work.combined;&lt;BR /&gt;&amp;nbsp; if anno_flag=1 then output dotanno;&lt;BR /&gt;&amp;nbsp; else output work.states;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;/* ---------------------------------------------------------*/&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;/* Declare a macro to do the plot, for the specified device */&lt;BR /&gt;/* ---------------------------------------------------------*/&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;%macro do_map(dev);&lt;/P&gt;&lt;P&gt;&amp;nbsp; GOPTIONS DEVICE=&amp;amp;dev;&lt;BR /&gt;&amp;nbsp; ODS LISTING CLOSE;&lt;BR /&gt;&amp;nbsp; ODS HTML path=odsout body="&amp;amp;name._&amp;amp;dev..html"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; parameters=('DataTipHighlightColor'='#00ff00')&amp;nbsp;&amp;nbsp; /* color of outline when you mouse over an area in javameta */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; style=statistical&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; pattern v=s c=CXE9E8DC r=100;&lt;BR /&gt;&amp;nbsp; goptions border;&lt;/P&gt;&lt;P&gt;&amp;nbsp; goptions htitle=2.75 htext=1.3;&lt;BR /&gt;&amp;nbsp; Title 'Dot-density Map of Flu Outbreak by Zipcode';&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;&amp;nbsp; proc gmap data=work.states map=work.states anno=work.dotanno;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; id county; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; choro county / coutline=black name="&amp;amp;name" nolegend;&lt;BR /&gt;&amp;nbsp; run;&lt;BR /&gt;&amp;nbsp; quit;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&amp;nbsp; ODS HTML CLOSE;&lt;BR /&gt;&amp;nbsp; ODS LISTING;&lt;BR /&gt; &lt;BR /&gt;%mend do_map;&lt;BR /&gt;/* ---------------------------------------------------------*/&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;/***********************************************************************/&lt;BR /&gt;/* Run GMAP do 'display' the map.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;/* Call the macro, for each desired 'device' type&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;/***********************************************************************/&lt;BR /&gt;%do_map(gif);&lt;/P&gt;&lt;P&gt;/*&lt;BR /&gt;%do_map(javameta);&lt;BR /&gt;%do_map(java);&lt;BR /&gt;%do_map(activex);&lt;BR /&gt;%do_map(javaimg);&lt;BR /&gt;%do_map(actximg);&lt;BR /&gt;*/&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 19 Aug 2014 21:42:31 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Graphics-Programming/Generate-a-different-number-of-random-or-evenly-distributed-dots/m-p/168103#M6255</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2014-08-19T21:42:31Z</dc:date>
    </item>
    <item>
      <title>Re: Generate a different number of random (or evenly distributed ) dots in every  polygons of a map?</title>
      <link>https://communities.sas.com/t5/Graphics-Programming/Generate-a-different-number-of-random-or-evenly-distributed-dots/m-p/168104#M6256</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I experimented with an algorithm similar to this for creating dot maps. If I recall, using 'proc ginside' to determine whether the random points were inside the map area/polygon was a bit slow ... but it could be done. See the 2 samples with the word 'density' in this set of examples:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;A href="http://robslink.com/SAS/democd59/aaaindex.htm" title="http://robslink.com/SAS/democd59/aaaindex.htm"&gt;Robert Allison's SAS/Graph Samples!&amp;lt;/title&amp;gt;&amp;lt;link rel=File-List href="index_files/filelist.xml"&amp;gt;&amp;lt;link rel=Edit-Time-Data href="index_files/editdata.mso"&amp;gt;&amp;lt;!--[if !mso]&amp;gt;&amp;lt;style&amp;gt;v\:* {behavior:url(#default#VML);}o\:* {behavior:url(#default#VML);}w\:* {behavior:url(#default#VML);}.shape {behavior:url(#default#VML);}&amp;lt;/style&amp;gt;&amp;lt;![endif]--&amp;gt;&amp;lt;title&amp;gt; &lt;/A&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 19 Aug 2014 21:45:25 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Graphics-Programming/Generate-a-different-number-of-random-or-evenly-distributed-dots/m-p/168104#M6256</guid>
      <dc:creator>GraphGuy</dc:creator>
      <dc:date>2014-08-19T21:45:25Z</dc:date>
    </item>
    <item>
      <title>Re: Generate a different number of random (or evenly distributed ) dots in every  polygons of a map?</title>
      <link>https://communities.sas.com/t5/Graphics-Programming/Generate-a-different-number-of-random-or-evenly-distributed-dots/m-p/168105#M6257</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;For the US, I generated a dot map with a look similar to the original one you showed, by using the centroids of the census block map to position my dots, and then plotted the dots on a higher-level map (in the case, county borders):&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;A class="active_link" href="http://robslink.com/SAS/democd64/census_block_map.htm" title="http://robslink.com/SAS/democd64/census_block_map.htm"&gt;http://robslink.com/SAS/democd64/census_block_map.htm&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;A href="http://robslink.com/SAS/democd64/census_block_map_info.htm" title="http://robslink.com/SAS/democd64/census_block_map_info.htm"&gt;http://robslink.com/SAS/democd64/census_block_map_info.htm&lt;/A&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 19 Aug 2014 21:49:00 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Graphics-Programming/Generate-a-different-number-of-random-or-evenly-distributed-dots/m-p/168105#M6257</guid>
      <dc:creator>GraphGuy</dc:creator>
      <dc:date>2014-08-19T21:49:00Z</dc:date>
    </item>
    <item>
      <title>Re: Generate a different number of random (or evenly distributed ) dots in every  polygons of a map?</title>
      <link>https://communities.sas.com/t5/Graphics-Programming/Generate-a-different-number-of-random-or-evenly-distributed-dots/m-p/168106#M6258</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;You should look at the MAP papers on &lt;A href="http://support.sas.com/rnd/papers/"&gt;&lt;SPAN style="color: #0000ff; font-size: 12pt; text-decoration: underline;"&gt;&lt;SPAN lang=""&gt;http://support.sas.com/rnd/papers/&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN style="font-size: 12pt;"&gt;&lt;SPAN lang=""&gt;.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt;"&gt;&lt;SPAN lang=""&gt;At this location, there are several papers.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt;"&gt;&lt;SPAN lang=""&gt;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt;"&gt;&lt;SPAN lang=""&gt;Papers from SUGI 29.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt;"&gt;&lt;SPAN lang=""&gt;Title: Tips and Tricks II.&amp;nbsp; Getting the most from your SAS/GRAPH maps.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt;"&gt;&lt;SPAN lang=""&gt;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt;"&gt;&lt;SPAN lang=""&gt;SAS Presentations at SAS Global Forum 2011.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt;"&gt;&lt;SPAN lang=""&gt;Title: Outbreak Maps: Visually Discovering Your Data.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 20 Aug 2014 14:08:59 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Graphics-Programming/Generate-a-different-number-of-random-or-evenly-distributed-dots/m-p/168106#M6258</guid>
      <dc:creator>Darrell_sas</dc:creator>
      <dc:date>2014-08-20T14:08:59Z</dc:date>
    </item>
    <item>
      <title>Re: Generate a different number of random (or evenly distributed ) dots in every  polygons of a map?</title>
      <link>https://communities.sas.com/t5/Graphics-Programming/Generate-a-different-number-of-random-or-evenly-distributed-dots/m-p/168107#M6259</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks everyone for the replies.&amp;nbsp; It often is a question of knowing what to look for. I 'm looking for "dot density" graph.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I'll try the %centroid and alpha-transparancy approach that Robert's use in his North Carolina map first, and if it doesnt look good I'll see what happens when I place the dots randomly instead of overlapping them.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I had read Tips and Trick 3 and 4, but hadnt gone all the way to 2.&amp;nbsp; I'll just read all of them and be done with it.&amp;nbsp; Thanks for the link to "outbreak maps" too!&lt;/P&gt;&lt;P&gt;S.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 20 Aug 2014 14:23:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Graphics-Programming/Generate-a-different-number-of-random-or-evenly-distributed-dots/m-p/168107#M6259</guid>
      <dc:creator>morglum</dc:creator>
      <dc:date>2014-08-20T14:23:35Z</dc:date>
    </item>
    <item>
      <title>Re: Generate a different number of random (or evenly distributed ) dots in every  polygons of a map?</title>
      <link>https://communities.sas.com/t5/Graphics-Programming/Generate-a-different-number-of-random-or-evenly-distributed-dots/m-p/168108#M6260</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Just wantedo to say that I've managed to produce something with 1-dot per person at the city level.&lt;/P&gt;&lt;P&gt;This probably wont work for a more zoomed-out approach, it which case I'll probably use Robert's approach of alpha-transparency.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;A href="http://PopulationGatineauSelonLangueMaternelle.sas/"&gt;The code.&amp;nbsp; &lt;/A&gt; There is a lot of copy paste from Robert's multiple examples.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;A href="https://dl.dropboxusercontent.com/u/16967144/SAS/GatineauMotherTongue/MotherTongue%20by%20DA.csv"&gt;The required CSV file&amp;nbsp; &lt;/A&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;for population by area &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;A href="https://dl.dropboxusercontent.com/u/16967144/SAS/GatineauMotherTongue/GatineauMothertongue.pdf"&gt;The output.&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;thanks for the help!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 26 Aug 2014 14:44:36 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Graphics-Programming/Generate-a-different-number-of-random-or-evenly-distributed-dots/m-p/168108#M6260</guid>
      <dc:creator>morglum</dc:creator>
      <dc:date>2014-08-26T14:44:36Z</dc:date>
    </item>
  </channel>
</rss>

