SAS PROC GMAP注释区域

时间:2015-04-16 17:00:04

标签: sas

我无法使用Gmap程序(SAS 9.4)注释我创建的地图。

我有一个我为两个区域(XX和YY)创建的自定义形状数据集。 XX实际上是一个由两种形状组成的不相交区域。

我有两个问题:

  1. Proc试图将区域XX绘制为一个连续的区域,即使我已将其定义为两个独立的子多边形。
  2. 虽然我已尝试使用%centroid宏来构建注释集,但标签不会填充在形状的质心中。坐标看起来是正确的,但文本没有显示在正确的位置。
  3. 以下是我放在一起的代码。

    data map;
        input Area $ Y X POINTORDER SUB_POLYGON_NUMBER POLYGON_NUMBER;
        cards;
    XX 1 1 1 1 1
    XX 2 1 2 1 1
    XX 3 1 3 1 1
    XX 3 2 4 1 1
    XX 3 3 5 1 1
    XX 2 3 6 1 1
    XX 1 3 7 1 1
    XX 1 2 8 1 1
    XX -1 0 1 2 1
    XX -2 0 2 2 1
    XX -1 -2 3 2 1
    YY 7 7 1 1 2
    YY 7 8 2 1 2
    YY 8 9 3 1 2
    ;
    run;
    
    data sales; 
        input Area $ Sales;
    datalines;
    XX 500
    YY 200
    ;
    run;
    
    %annomac;
    
    %CENTROID(map,anno,Area,segonly=1); 
    
    data anno;
        set anno;
        text=Area;
        function='label';
        style="'Albany AMT/bold'";
    run;
    
    proc gmap data = sales map=map;
      id Area;
      choro Sales / nolegend annotate=anno;
    run;
    quit;
    

2 个答案:

答案 0 :(得分:2)

正如乔所说,如果有两个问题,这将是一件好事。我回答了第一部分,因为Joe回答了第二部分。

通过打开MAPS.Sweden,我发现区域标识符POLYGON_NUMBERSUB_POLYGON_NUMBER被称为IDSEGMENT。因此,如果您根据map定义中的列名更改列名,您将获得所需的结果。

data map;
    input Area $ Y X POINTORDER SEGMENT ID;
    cards;
XX 1 1 1 1 1
XX 2 1 2 1 1
XX 3 1 3 1 1
XX 3 2 4 1 1
XX 3 3 5 1 1
XX 2 3 6 1 1
XX 1 3 7 1 1
XX 1 2 8 1 1
XX -1 0 1 2 1
XX -2 0 2 2 1
XX -1 -2 3 2 1
YY 7 7 1 1 2
YY 7 8 2 1 2
YY 8 9 3 1 2
;
run;

之前我没有使用过gmap,所以非常有趣。我试着阅读文档以了解如何命名列以使其工作。我没有找到任何东西,但它应该在那里。如果您知道我可以阅读的内容,请发表评论。

答案 1 :(得分:1)

我不确定你问题的第一部分,但你可能应该将它们分成两个问题 - 这是两个不同的问题。

就问题标题中的问题而言,注释文本的位置,你有两个问题。

一:您的注释文本没有使用相同的坐标系。在SAS / GRAPH中,这由XSYSYSYS等变量控制。默认为4,这是整个图像的值;这不是你想要的。你想要的是2,它只在数据空间中(即实际上在绘制的轴上)。

您还需要使其可见:默认情况下,它不会在图元素上“绘制”。

data anno;
    set anno;
    text=Area;
    function='label';
    style="'Albany AMT/bold'";
    color='Red';
    when='After';
    xsys='2';
    ysys='2';
run;

我将它设为红色以使其更加明显,但您当然可以使用黑色。

请注意,我使用单个多边形测试了这个(我删除了subpolygon = 2);我不确定如果两者都有,会发生什么,但中心可能有点奇怪。