2012-03-01 1 views
0

Что я пытаюсь сделать:Как использовать разные символы для групп x * y = z в proc gplot?

Я создаю участки, используя следующий код. PERIOD имеет 3 разных значения, поэтому сюжетные и plot2-заявления каждый создают 3 серии на графике с помощью запроса типа x * y = z. Я хочу, чтобы 3 серии из выражения сюжета имели символы, которые были объединены, и я хочу, чтобы 3 серии из выражения plot2 имели символы, которые не объединены. Независимо от того, какое решение я придумал, нужно работать внутри макроса.

Проблема

Независимо от того, что я стараюсь, все 6 серии на каждом графике не в конечном итоге с использованием тех же символов. Все другие параметры сюжета, которые я определяю вне вызовов proc gplot, правильно подбираются, так что я делаю неправильно с определениями символов? Я был бы признателен, если бы кто-нибудь смог опубликовать пример правильного синтаксиса.

Ссылка

Я нашел эту ссылку, которая производит очень похожий вид участка с различными символами для сюжета и Plot2 серии, но он не использует запрос у = г участка х *:

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

Я также нашел эту ссылку, которая содержит код, который использует у = запрос г х *, но без Plot2 заявления:

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

Эта страница утверждает, что это можно сделать как в то же самое время и получить различные символы для каждой серии, используя символы statments, но на самом деле не обеспечивают необходимый код, чтобы сделать это:

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

примеры кода

Если я запускаю этот код, все 6 серии построены с Интерполом = 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 построены с Интерполом = присоединиться:

%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 серий построены с помощью интерполя = join.
  • Если я перемещаю 6 различных выражений символов вне proc gplot, но все же внутри макроса, все 6 серий строятся с использованием интерполя = объединение.
  • Если я перемещаю 6 различных операторов символов за пределами макроса и удаляю goptions reset = all из макроса, все 6 серий строятся с помощью interpol = join.
  • Если я назначаю 6 различных значений = параметры в 6 разных символьных операторах (чтобы заставить их нарисовать разные символы), значение из символа4 используется для всех 6 рядов.
  • Если я использую 2 переменные с 6 различными значениями для z в моих запросах 2 x * y = z, то же самое происходит.

Как я могу получить 3 серий каждого типа, когда у меня есть запрос у = г участок в х * как в сюжете и заявления Plot2?

+0

Обратите внимание, что выражения символов являются глобальными операторами. Для меня они находятся вне шага. Я не использовал GRAPH через некоторое время, поэтому не могу дать окончательного ответа. Возможно, вам нужны только два оператора SYMBOL. Я думаю, что в обоих случаях, которые вы даете, используются инструкции SYMBOL1 и SYMBOL2. – DavB

+0

@DavB Когда я устанавливаю 6 операторов символов, операторы SYMBOL1-3, по-видимому, игнорируются, а настройки для SYMBOL4 применяются к каждой серии (в соответствии с другими вещами, которые я пробовал). Установка только двух операторов символов также не работает. Раздражающе, похоже, не существует явного способа сопоставления серии сюжетов с выражением символа. – user667489

+0

@ user667489 ... вы можете посмотреть http://support.sas.com/kb/25/581.html. Это может привести вас в правильном направлении. Если я получу шанс позже, я посмотрю – DavB

ответ

3

Исправлено! Из глубины в документации для утверждения символа:

Управления Последовательных SYMBOL Заявления

Если вы задаете последовательно пронумерованы заявления SYMBOL и вы хотите SAS/GRAPH использовать каждое определение только один раз, использовать цветовые характеристики , чтобы каждый оператор SYMBOL генерировал только одно определение символа.

Все, что мне нужно было сделать, это добавить параметр color = к каждому из 6 условных обозначений символов, а затем каждый из них использовался ровно один раз в том порядке, который я ожидал. Это, безусловно, один из менее интуитивных аспектов SAS, с которыми я столкнулся, мягко говоря.

+0

Если вы не укажете цвет, то он использует первую символьную инструкцию, циклически проходящую через цвета, пока не закончится. Затем при необходимости он переместится на второй или третий символ. – Tom

Смежные вопросы