Vamos a tratar como usar shapefiles para dibujar mapas con SAS. Utilizaré para los ejemplos datos de la trágica lacra que nos asola estos días, la enfermedad del coronavirus.
Un shapefile es un formato vectorial de almacenamiento de información geográfica, es además un fichero multiarchivo porque requiere de varios ficheros para poder ser interpretado. Son varios los ficheros que pueden estar incluidos, pero al menos deben existir estos tres: .shp, .shx y .dbf.
SAS puede utilizar proc mapimport
para importar el shapefile y convertirlo en tablas SAS que podremos tratar para construir gráficos. Además, en este caso, le vamos a asociar datos sobre el coronavirus consultados a fecha 4 de abril en la siguiente página de Sanidad.
proc gmap
se encarga de dibujar el mapa que está definido en el parámetro map=
y los datos para los gráficos o los colores de representación se encuentran informados por el contenido del parámetro data=
. El statement choro (jocoso nombre para los peruanos) indica la variable que se utilizará para representar las distintas zonas del mapa con un color más o menos intenso según su valor relativo. La opción choro variable/discrete
indica una variable no continua, por lo que los colores representados con colores distintos.

filename file "&ruta/gadm36_ESP_1.shp" encoding="UTF-8";
proc mapimport datafile=file out = GDIS;
run;
proc sort data=GDIS out=COMUNIDAD (rename=(name_1 = comunidad)) nodupkey;
by gid_1;
run;
/* Adecuamos la posición de las Islas Canarias para tener un mapa más grande */;
data GDIS;
set GDIS;
if name_1='Islas Canarias' then do;
x = x + 20;
y = y + 7;
end;
run;
/* Añadimos la información del coronavirus */
data CORONAVIRUS;
infile datalines dsd missover;
format contagiados 8. comunidad $50. fallecidos 8.;
input contagiados comunidad $ fallecidos;
cards;
36249, 'Comunidad de Madrid', 4723
24734, 'Cataluña', 2508
7875, 'Castilla y León', 723
9324, 'Castilla-La Mancha', 989
8187, 'PaÃs Vasco', 477
7869, 'AndalucÃa', 426
6901, 'Comunidad Valenciana', 571
5625, 'Galicia', 159
2972, 'Comunidad Foral de Navarra', 171
3078, 'Aragón', 251
2405, 'La Rioja', 128
1979, 'Extremadura', 208
1522, 'Principado de Asturias', 76
1564, 'Islas Canarias', 78
1384, 'Cantabria', 68
1271, 'Islas Baleares', 71
1188, 'Región de Murcia', 51
152, 'Ceuta y Melilla', 3
;
run;
proc sql;
create table COMUNIDAD2 as
select a.*,
b.contagiados,
b.fallecidos
from COMUNIDAD a
left join CORONAVIRUS b
on a.comunidad = b.comunidad;
quit;
proc gmap data=COMUNIDAD2 map=GDIS;
title 'Contagiados por coronavirus en España';
id gid_1;
choro contagiados;
run;
Utilizar block
en vez de choro
representará los datos como columnas verticales dentro de cada zona. La opción legend=legend
se utiliza para indicar que el color de las columnas y de la leyenda serán iguales.

proc gmap data=COMUNIDAD2 map=GDIS;
title 'Contagiados por coronavirus en España';
id gid_1;
block contagiados / legend=legend;
run;