利用SAS語法繪製地圖

0
在SAS中提供的台灣地圖僅包含台灣縣市地圖圖資,若是想要繪製其他的地圖(如鄉鎮市區里)可以去政府的網站下載地圖資訊檔,以台北市政府為例可以到http://data.taipei.gov.tw/
選擇資料目錄->依資料分類查詢->行政/政治->台北市區界圖->檔案下載
將下載的opendata.zip解壓縮至C:\Demo_map
其中包含了台北市區界圖.dbf, 台北市區界圖.shp, 台北市區界圖.shx

23
利用SAS的mapimport procedure匯入.shp檔案,並輸出成SAS的永久資料集townmap儲存於C:\Demo_map下
libname xyz "C:\Demo_map";
proc mapimport datafile="C:\Demo_map\台北市區界圖.shp"
                  out=xyz.townmap;
run;
我們可以由市政府民政局下載最新102年6月人口戶數統計表,並在SAS EG中建立一個people的資料集如下
data people;
input tname $ people @@;
datalines;
松山區 211065 信義區 227951 大安區 313762 中山區 227825
中正區 163158 大同區 129498 萬華區 192753 文山區 270557
南港區 119053 內湖區 281528 士林區 289454 北投區 254950
;
run;
運行gmap procedure,指定你要分析的資料people,並指定你的地圖圖資xyz.townmap。id後面接的是資料跟地圖對應的指標變數,choro後面是您欲分析的變數。
proc gmap data=people map=xyz.townmap;
id tname;
choro people/statistic=sum levels=5 ;
run;
QUIT;
我們由上面的程式得到下圖(台北市各行政區的人口數)的地圖結果
24
如果想把行政區的名字放在圖片上,可以在執行gmap procedure前先執行下面的程式,先把行政區的名稱抓出來且要計算名稱所要放置的位置(一般而言是置中),SAS在這有提供巨集函數可供使用,但在使用該巨集函數前,須先將要顯示的名稱做排序的動作。
其中%maplabel巨集函數的用法可以參照本文最後的SAS Help的說明
利用SAS的%maplabel巨集函數所創造出來的行政區的名稱及位置建立在maplabel的資料集中並儲存於C:\Demo_map下
proc sort data=xyz.townmap;
by tname;
run;
%annomac;
%maplabel (xyz.townmap,xyz.townmap, xyz.maplabel, tname,tname
           ,font=標楷體, color=black, size=2, hsys=3);
run;
當行政區的名稱及位置的資料都創建好後,只要在gmap procedure後面指定annotate=xyz.maplabel這個參數即可
proc gmap data=people map=xyz.townmap;
id tname;
choro people/statistic=sum levels=5 annotate=xyz.maplabel;
run;
QUIT;
我們由上面的程式得到下圖(台北市各行政區(加上行政區名稱)的人口數)的地圖結果
25
Tags
Share

About Author

SAS Taiwan

SAS 學習資源 : https://blogs.sas.com/content/sastaiwan/

Comments are closed.

Back to Top