09-11-2017 03:08 AM - edited 09-11-2017 03:10 AM
Hi. I have confronted to a problem on map creation. I need to add the shops on the map.
the code that creates the map is below.
So, please give me a hint how to add the coordinates on the map.
%annomac; %maplabel (mapsgfk.armenia, mapsgfk.armenia_attr, work.labelout, idname, id, font=Albany AMT, color=black, size=1.5, hsys=3); proc gmap map=mapsgfk.armenia data=mapsgfk.armenia; *where id eq "AM-01"; id id; choro id / nolegend annotate=labelout coutline=gray stat=first; run; quit;
proc gproject data=myxlfl.sc_coord_idd out = sc_coord_id_XY; id Segment; run;
I have tried to project the coordinates in such way but it was wrong.
The coordinates of the shops is here.
09-11-2017 11:03 PM
You could just get the closest X and Y for your LAT on LONG.
data SHOPS; input ROW ID $ LAT LONG; cards; 1 AM-01 40.19741295 44.5678061 2 AM-10 39.76049643 45.33073236 3 AM-10 39.68937627 45.47180898 4 AM-10 39.83534526 45.66534589 5 AM-11 41.22988562 44.83745333 6 AM-01 40.1416615 44.52101183 run; proc sql; create table ANNO as select SHOPS.ROW, SHOPS.ID, la.Y ,lo.X , 'label' as FUNCTION, put(ROW,z2.) as TEXT, '2' as XSYS, '2' as YSYS from SHOPS ,MAPSGFK.ARMENIA la ,MAPSGFK.ARMENIA lo where SHOPS.ID=la.ID and SHOPS.ID=lo.ID group by 1,2 having abs(SHOPS.LAT-la.LAT) =min(abs(SHOPS.LAT -la.LAT)) and abs(SHOPS.LONG-lo.LONG)=min(abs(SHOPS.LONG-lo.LONG)) ; quit; proc gmap map=MAPSGFK.ARMENIA data=MAPSGFK.ARMENIA; id id; choro id / nolegend annotate=ANNO coutline=gray stat=first; run; quit;
09-12-2017 05:38 AM
Hi. many thanks for help. one more question.
The code you have written, creates "ANNO" data set, in which X and Y ccordinates exist. So, please explain, what is the format of the "X" and "Y" .
I tried to use proc gproject, but in vain.
09-12-2017 07:42 AM - edited 09-12-2017 07:49 AM
Not too sure, they are the coordinates used by the SAS maps, but as long as you have a way to map X and Y to LAT and LON as I did, I doesn't really matter for what you want to do.
09-12-2017 08:04 AM
So, to be more clear. I have a bunch of coordinates of shops, as I wrote before. I want to understand how you converted the coordinates into the coordinates that SAS uses (X, Y ). are there another methods besides the way you used for converting. the way of converting the coordinates that you used is not familiar to me.
I know several formats of coordiantes such as decimal, cartesian, degree, polar which are explaind in sas documents. but the said is not known.
could I use
proc gprogect for converting the coordinates.
09-12-2017 11:26 AM
@Garik I think you're overthinking this. You need the latitude and longitude, X=Longitude and Y=Latitude
If you're source data is projected onto a different coordinate system then you need some modifications or GPROJECT. But try it with just your latitude and longitude first.
09-12-2017 08:20 PM
My method is really simple: find the same latitude in the map file as what you have, and get the matching Y.
A slightly more sophisticated method, since for most countries the projection is essentially flat: you can probably create a first degree polynomial equation to transform LAT/LON into Y/X just by looking the four columns in the maps file.
If you want to project, see the post by @ballardw for a third method to match LAT/LON to X/Y.
09-12-2017 12:00 PM
You projection is incomplete. You want to reference the map data set to have the "bounds" of the map area and some other options.
I don't know how/what you pasted for the Proc Gproject code but I can't copy and paste to edit to something close to what you need.
From the online documentation example for projecting an annotate data set:
proc gproject data=cities degrees latlon out=citiesp parmentry=us48p dupok; id; run;
Data=cities would be the equivalent of your coordinate set
Degrees says that the data for latitude and longitude are measured in degrees not radians
Latlon says to use the Lat and Long variables from the MAP data set for projection
Out= output data set
Parmentry= the map data set with X, Y and Lat Long variables
Dupok and option not to remove duplicate projections.
Id does not have a variable because you want to project points (cities) not polygons that require identification of area units.