2012-03-01 23 views
0

我在做什麼:如何在proc gplot中爲不同的符號組使用x * y = z圖?

我正在使用下面的代碼創建圖。 PERIOD有3個不同的值,因此plot和plot2語句通過x * y = z類型的繪圖請求在圖上創建3個系列。我希望plot語句中的3個系列具有相連的符號,並且我希望plot2語句中的3個系列具有未加入的符號。無論我想出什麼解決方案,都需要在宏內部工作。

問題

無論我怎麼努力,所有6系列中各表上最終會使用相同的符號。我在proc gplot調用之外定義的所有其他繪圖選項都正確拾取,那麼我在做什麼錯誤符號定義?如果有人能發表正確語法的例子,我將不勝感激。

參考

我發現這個鏈接,產生一個非常類似的排序與劇情和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

本頁面聲稱有可能在同一時間做兩件事,讓每個系列使用符號statments不同的符號,但實際上並沒有提供必要的代碼來做到這一點:

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

代碼示例

如果我運行此代碼,所有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; 
    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個系列都是用interpol = join繪製的。
  • 如果我將6個不同的符號語句移動到proc gplot之外,但仍在宏內部,則所有6個系列均繪製爲interpol = join。
  • 如果我移動宏的6個不同的符號語句,並從宏中刪除goptions reset = all,則所有6個系列均繪製爲interpol = join。
  • 如果我在6個不同的符號語句中分配6個不同的值=選項(試圖強制它們繪製不同的符號),symbol4的值將用於所有6個系列。
  • 如果我在2 x * y = z個請求中使用2個具有6個不同z值的變量,那麼仍然會發生同樣的情況。

如何,我可以得到3個系列各型時,我有兩個情節 plot2報表X * Y = Z情節的要求嗎?

+0

請注意符號語句是全局語句。對我來說,他們屬於這一步。我有一段時間沒有使用GRAPH,所以無法給出明確的答案。也許你只需要兩個SYMBOL語句。我在想,在這兩種情況下,都會使用SYMBOL1和SYMBOL2語句。 – DavB 2012-03-02 08:58:48

+0

@DavB當我設置6個符號語句時,SYMBOL1-3語句顯然被忽略,SYMBOL4的設置被應用於每個系列(按照我嘗試的其他方法)。只設置2個符號語句也不起作用。令人煩惱的是,似乎沒有任何明確的方式將劇情繫列與符號語句進行匹配。 – user667489 2012-03-02 09:24:06

+0

@ user667489 ...你可以看一下http://support.sas.com/kb/25/581.html。它可能會引導你朝着正確的方向前進。如果稍後有機會,我會看看 – DavB 2012-03-02 09:45:21

回答

3

固定!從深爲符號聲明文件中:

控制相繼的符號聲明

如果指定連續編號SYMBOL語句,你想 SAS/GRAPH使用的每個定義只有一次,用色規格 以確保每個SYMBOL語句只生成一個符號定義。

我所要做的只是爲6個符號語句中的每一個添加一個color =選項,然後每個符號按我預期的順序使用一次。這當然是我遇到的SAS中不那麼直觀的方面之一,要稍微說一下。

+0

如果您沒有指定顏色,那麼它會使用第一個循環遍歷顏色的符號語句,直到用完爲止。然後,如果需要,它將移至第二個或第三個符號語句。 – Tom 2016-08-29 00:10:56

相關問題