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

Graph 如何在proc gplot中为x*y=z绘图组使用不同的符号?,graph,sas,symbols,Graph,Sas,Symbols,我想做什么: 我正在使用下面的代码创建绘图。PERIOD有3个不同的值,因此plot和plot2语句分别通过x*y=z类型的绘图请求在绘图上创建3个系列。我希望plot语句中的3个系列具有连接的符号,并且plot2语句中的3个系列具有未连接的符号。我提出的任何解决方案都需要在宏内部工作 问题 不管我怎么做,每个图表上的6个系列最终都使用相同的符号。我在proc gplot调用之外定义的所有其他打印选项都被正确地拾取,那么我在符号定义方面做错了什么?如果有人能提供一个正确语法的例子,我将不胜感激

我想做什么:

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

问题

不管我怎么做,每个图表上的6个系列最终都使用相同的符号。我在proc gplot调用之外定义的所有其他打印选项都被正确地拾取,那么我在符号定义方面做错了什么?如果有人能提供一个正确语法的例子,我将不胜感激

参考资料

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

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

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

代码示例

如果我运行此代码,则所有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个不同的symbol语句,使它们都位于第一个plot语句之前,则所有6个系列都将使用interpol=join进行打印
  • 如果我将6个不同的符号语句移到proc gplot外部,但仍在宏内部,则所有6个系列都将使用interpol=join绘制
  • 如果我将6个不同的符号语句移到宏之外,并从宏中删除goptions reset=all,则所有6个系列都将使用interpol=join打印
  • 如果我在6个不同的symbol语句中指定6个不同的value=选项(试图强制它们绘制不同的符号),则symbol4中的值将用于所有6个系列
  • 如果我在2x*y=z请求中使用2个变量和6个不同的z值,同样的事情仍然会发生

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

已修复!从symbol语句的文档深处:

控制连续符号语句

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


我所要做的就是在6个symbol语句中的每个语句中添加一个color=选项,然后按照我预期的顺序使用每个语句一次。委婉地说,这肯定是我遇到的SAS不那么直观的方面之一。

修复了!从symbol语句的文档深处:

控制连续符号语句

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


我所要做的就是在6个symbol语句中的每个语句中添加一个color=选项,然后按照我预期的顺序使用每个语句一次。委婉地说,这肯定是我遇到的SAS中不那么直观的方面之一。

注意符号语句是全局语句。对我来说,它们属于台阶之外。我已经有一段时间没用这个图表了,所以不能给出一个明确的答案。也许您只需要两个符号语句。我认为在您给出的两种情况下,都会使用SYMBOL1和SYMBOL2语句。@DavB当我设置6个symbol语句时,SYMBOL1-3语句显然会被忽略,而SYMBOL4的设置会应用于每个系列(根据我尝试过的其他方法)。仅设置2个symbol语句也不起作用。令人烦恼的是,似乎没有任何明确的方式将绘图系列与符号语句匹配。@user667489。。。你可以看看。它可能会指引你走向正确的方向。如果我以后有机会,我会注意到symbol语句是全局语句。对我来说,它们属于台阶之外。我已经有一段时间没用这个图表了,所以不能给出一个明确的答案。也许您只需要两个符号语句。我认为在您给出的两种情况下,都会使用SYMBOL1和SYMBOL2语句。@DavB当我设置6个symbol语句时,SYMBOL1-3语句显然会被忽略,而SYMBOL4的设置会应用于每个系列(根据我尝试过的其他方法)。仅设置2个symbol语句也不起作用。令人烦恼的是,似乎没有任何明确的方式将绘图系列与符号语句匹配。@user667489。。。你可以看看。它可能会指引你走向正确的方向。如果我以后有机会,我会看一看如果不指定颜色,那么它会使用第一个符号语句在颜色之间循环,直到用完为止。然后,如果需要,它将移动到第二个或第三个symbol语句。如果不指定颜色,它将使用第一个symbol语句在颜色之间循环,直到用完为止。然后,如果需要,它将移动到第二个或第三个symbol语句。