I think there are alot of problems here. You are not Proc GPROJECTing your map itself. I just adjusted your program.
Also, you might want to place your annotate on the centroid of the country. You are currently using the first point in the US, for example. That is way off in Alaska. The centroid macro is:
%annomac; %centroid(InputDS,OutputDS,idvar,SEGONLY=1);
The last argument is to use the largest segment of a country only.
I hope you can figure out your program from the one below.
Here is your modified program:
data world; /*Don't delete missing values*/
length country $50.;
set mapsgfk.world;
*country=put(id,glcnsm.);
x=Long; y=lat; /*Moved unprojected to x,y*/
country=strip(idname);
if country ='Dominican Republic' then country='Dominican Rep.';else if country ='Korea, South' then country='South Korea';else if country ='Netherlands Antilles' then country='Dutch Antilles';
else if country ='South Africa' then country='South Africa';else if country ='Trinidad And Tobago' then country='Trinidad,Tobago';else if country ='United Arab Emirates' then country='Utd.Arab Emir.';
run;
data final1;
length country $50. region $50.;
Country="China"; Unit1=10000; Region="AsiaPacific"; /*x=8.4465511368; y=46.8147705; */ output;
Country="United States"; Unit1=100000; Region="Americas"; /*x=-99.56837548; y=37.1680595;*/ output;
run;
proc sql noprint;
create table world1 as
select distinct a.*,b.region,b.unit1 from world as a inner join final1 as b on a.country=b.country order by b.region,a.country,b.unit1,a.x,a.y;
quit;
data world1;
set world1 /*(drop=x y)*/;
by region country unit1 ;
*if first.country;
*Here converting degrees to radiants;
*x=atan(1)/45*long; /*Not sure why radians */
*y=atan(1)/45*lat; /* because world isn't */
*x=-x;
*keep region country x y unit1;
run;
data repl;
set world1;
by region country unit1;
if first.country;
run;
data repl;
length position $8. function style color text $100.;
set repl;
flag=1;
xsys='2'; ysys='2'; hsys='3'; function='pie'; when ='a'; rotate= 360;
style='solid';
size=sqrt(unit1/3.14)*.02;
color='green';
output;
function='label';style='Albany AMT'; position='8';rotate=.; color='vibg';
size=.;text=strip(country);
output;
function='label';style=''; position='12';rotate=.;color='red';
size=.;
text=strip(put(unit1,8.));
output;
run;
data combined;
set world repl; /*world instead of world1*/
run;
/* Used combined here. Also eastlong and degrees */
/*
proc gproject data=combined out=combined project=gnomon dupok eastlong degrees;
id region country;
run;
*/
/*seperated map and annotate */
data map anno; set combined;
if flag=1 then output anno;
else output map;
run;
pattern c='tan';
proc gmap data=map map=map anno=anno; id country segment; choro segment / levels=1; run;
... View more