如何在proc gplot中为x * y = z图组使用不同的符号?

时间:2012-03-01 17:39:46

标签: graph sas symbols

我正在尝试做什么:

我正在使用下面的代码创建绘图。 PERIOD有3个不同的值,因此plot和plot2语句通过x * y = z类型的绘图请求在绘图上创建3个系列。我希望plot语句中的3个系列具有连接的符号,并且我希望plot2语句中的3个系列具有未连接的符号。无论我想出什么解决方案,都需要在宏中工作。

问题

无论我尝试什么,每张图表上的所有6个系列最终都使用相同的符号。我在proc gplot调用之外定义的所有其他绘图选项都被正确选取,那么我对符号定义的错误是什么?如果有人能发布正确语法的示例,我将不胜感激。

参考

我找到了这个链接,它为plot和plot2系列生成了一个非常类似的不同符号的绘图,但是它没有使用x * y = z绘图请求:

http://support.sas.com/techsup/technote/ts422.html

我还发现了这个链接,其中包含一些使用x * y = z请求但没有plot2语句的代码:

http://www.sfu.ca/sasdoc/sashtml/ets/chap2/sect27.htm

此页面声称可以同时执行这两个操作,并使用符号状态为每个系列获取不同的符号,但实际上并未提供必要的代码来执行此操作:

http://support.sas.com/documentation/cdl/en/graphref/63022/HTML/default/gplot-plot2.htm#gplot-fig5

代码示例

如果我运行此代码,则所有6个系列都使用interpol = none:

绘制
%macro sr_elas_plots(VAR);
  goptions reset = all;
  axis1 label=(angle = 90);
  legend1 label=('Obs. elasticity');
  legend2 label=('Quote volume');

  proc gplot data = _p_&VAR;
  symbol1 interpol=join value=dot height=3;
  symbol2 interpol=join value=dot height=3;
  symbol3 interpol=join value=dot height=3;

    plot  Elasticity*&VAR = PERIOD / legend = legend1 vaxis=axis1;
  symbol1 interpol=none value = dot height=3;
  symbol2 interpol=none value = dot height=3;
  symbol3 interpol=none value = dot height=3;

    plot2 QUOTES*&VAR = PERIOD / legend = legend2; 
    by    NBIND CHANNEL;
  run;
  quit;
%mend sr_elas_plots;

但是,如果我运行此代码,则所有6个都使用interpol = join:

绘制
%macro sr_elas_plots(VAR);
  goptions reset = all;
  axis1 label=(angle = 90);
  legend1 label=('Obs. elasticity');
  legend2 label=('Quote volume');

  proc gplot data = _p_&VAR;
  symbol1 interpol=join value=dot height=3;
  symbol2 interpol=join value=dot height=3;
  symbol3 interpol=join value=dot height=3;

    plot  Elasticity*&VAR = PERIOD / legend = legend1 vaxis=axis1;
  symbol4 interpol=none value = dot height=3;
  symbol5 interpol=none value = dot height=3;
  symbol6 interpol=none value = dot height=3;

    plot2 QUOTES*&VAR = PERIOD / legend = legend2; 
    by    NBIND CHANNEL;
  run;
  quit;
%mend sr_elas_plots;

我尝试过的其他事情

  • 如果我移动6个不同的符号语句,使它们都在第一个绘图语句之前,则所有6个系列都用interpol = join绘制。
  • 如果我将6个不同的符号语句移到proc gplot之外但仍在宏中,则所有6个系列都用interpol = join绘制。
  • 如果我在宏外移动6个不同的符号语句,并从宏中删除goptions reset = all,则所有6个系列都用interpol = join绘制。
  • 如果我在6个不同的符号语句中分配6个不同的value =选项(试图强制它们绘制不同的符号),则symbol4的值将用于所有6个系列。
  • 如果我在2 x * y = z请求中使用2个具有6个不同值的变量,那么同样的事情仍然会发生。

当我在情节 plot2语句中有x * y = z绘图请求时,如何获得每种类型的3个系列?

1 个答案:

答案 0 :(得分:3)

固定!从符号声明的文档深处:

  

控制连续的SYMBOL语句

     

如果指定连续编号的SYMBOL语句,则需要   SAS / GRAPH仅使用每个定义一次,使用颜色规范   确保每个SYMBOL语句只生成一个符号定义。

我所要做的就是为6个符号语句中的每一个添加一个color =选项,然后每个符号按照我预期的顺序使用一次。这当然是我遇到的SAS不那么直观的一个方面,温和地说。