2014-10-30 80 views
3

我期待在SAS中创建热图。我有一个很大的x,y坐标数据集,就是这样。从阅读到的一切,我需要为使用像这样的坐标的“计数”:在SAS中创建热图使用

proc kde data=dataSet; 
    bivar X Y/out=outputDataSet; 
run; 

接下来,我需要创建为heatchart模板 - 我发现这个样本代码,但我不敢肯定什么都做:

proc template; 
    define statgraph heatmapparm; 
    begingraph; 
     layout overlay; 
     heatmapparm x=value1 y=value2 colorresponse=count/
      name="heatmapparm" xbinaxis=false ybinaxis=false; 
     continuouslegend "heatmapparm"/location=outside valign=bottom; 
     endlayout; 
    endgraph; 
end; 
run; 

我假设我需要插入我的变量为x和y的斑点,计数到colorresponse的地方,然后用这样的代码来获取热图:

proc sgrender data=outputDataSet template=heatmapparm; 
run; 

此代码导致出现错误消息并且没有图输出,因为它“缺少参数”。任何帮助都会很棒。谢谢!

回答

3

里克威克林在他的博客The DO Loop上做了很好的解释。

您应该查看关于图形模板语言(GTL)的教程,例如Sanjay Matange(包括GTL在内的ODS图形系统的首席开发人员)。他写了一本关于这个话题的书,或者你可以阅读他的论文,比如this introduction

基本上,是的,你应该用你的x/y变量填充x =和y =,colorresponse =用定义计数的变量(如何用红色/蓝色来表示)。

下面是一个例子。这里我们使用dynamic variables,这意味着您可以在SGRENDER步骤中定义相关变量。 Rick在他的博客文章中展示了这一点,我使用了一个稍微简化的版本。您可能完全按照原样使用PROC TEMPLATE,只需更改SGRENDER以引用您的数据集和变量。数据集test只是构成数据,将生成一个有趣的热图。

proc template; 
    define statgraph heatmapparm; 
    dynamic _X _Y _Z; 
    begingraph; 
     layout overlay; 
     heatmapparm x=_X y=_Y colorresponse=_Z/ 
      name="heatmapparm" xbinaxis=false ybinaxis=false; 
     continuouslegend "heatmapparm"/location=outside valign=bottom; 
     endlayout; 
    endgraph; 
    end; 
run; 

data test; 
    call streaminit(7); 
    do x = 1 to 10; 
    do y = 1 to 10; 
     count_var = rand('Normal',(x+y)/2); 
     output; 
    end; 
    end; 
run; 


proc sgrender data=test template=heatmapparm; 
dynamic _X='x' _Y='y' _Z='count_var'; 
run;