【问题标题】:How do use proc gplot with group?如何将 proc gplot 与组一起使用?
【发布时间】:2015-06-28 08:27:21
【问题描述】:

我有以下数据:

Year   Country    Score 
----   -------    -----
2007     AU         76        
2007     SG         78        
2008     AU         56        
2008     SG         90        
2009     AU         82       
2009     SG         48        

假设我想使用 gplot 显示每个国家/地区每年的分数(按年份分组),例如:

我试过了:

plot Score*(country year);

plot country*year=score;

但是它们都不能工作。我对gplot不熟悉,那么如何实现呢?

【问题讨论】:

    标签: sas


    【解决方案1】:

    /* 先抓取你要绘制的 2007 年数据 */

    PROC SQL;
     create table data2007 as
     select * 
     from data_original
     where year=2007;
    QUIT; 
    

    /* 然后使用符号语句绘制数据*/

    symbol interpol=boxt;
    proc gplot data=data2007;
     plot score*country;
    run;
    quit; 
    

    /* 你也可以研究 PROC UNIVARIATE 和 PROC BOXPLOT 来获得类似的结果 */

    如果您想按年执行此操作....我相信以下方法会起作用:

    symbol interpol=boxt;
    proc gplot data=data2007;
     plot score*country;
    by year;
    run;
    quit; 
    

    如果您想拥有全年和所有国家,您可以:

    PROC SQL;
     create table new_data as
     select year
       , country
       , LEFT(TRIM(country) || " _ " || year) as country_year
     from data_original
    QUIT; 
    
    symbol interpol=boxt;
    proc gplot data=data2007;
     plot score*country_year;
    run;
    quit; 
    

    注意要绘制的级别数。

    【讨论】:

    • BY 语句将为每年生成单独的图表(单独的整个图像),这可能(但不是绝对)不是基于 OP 的图像所期望的(尽管我承认它不清楚)。
    【解决方案2】:

    SGPLOT 将是最简单的方法;它在很多方面都比 GPLOT 强大得多,漂亮的箱线图就是其中之一。

    这非常接近您想要的。您可能需要做一些事情来获得您想要的图例,但它确实会按照您的要求将单独的箱形图分组。我添加了一些额外的数据以使箱线图看起来更逼真。

    data have;
    input Year   Country $    Score ;
    datalines;
    2007     AU         76   
    2007     AU         74
    2007     AU         78 
    2007     SG         78
    2007     SG         80
    2007 SG 76 
    2008     AU         56        
    2008     SG         90        
    2009     AU         82       
    2009     SG         48  
    2008 AU 54
    2008 AU 58
    2008 SG 88
    2008 SG 92
    2009 AU 78
    2009 AU 86
    2009 SG 44
    2009 SG 52
    ;;;;
    run;
    
    title;
    proc sgplot data=have;
     vbox score/category=country group=year groupdisplay=stacked;   *or reverse category and group depending on your preference;
    run;
    

    GPLOT 有点棘手。在 GPLOT 中获取组的方式是等号,所以:

    symbol interpol=boxt;
    proc gplot data=have;
     plot score*country=year;
    run;
    quit;
    

    但这看起来不太好,也没有相邻堆叠。我也不喜欢让他们坐在情节上的正确位置是多么困难。

    【讨论】:

      猜你喜欢
      • 2019-10-01
      • 1970-01-01
      • 2012-03-20
      • 1970-01-01
      • 1970-01-01
      • 2012-01-20
      • 2020-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多