【问题标题】:Plotting seasonal data, with years on top of each other in SAS?在 SAS 中绘制季节性数据,年份彼此重叠?
【发布时间】:2016-12-06 06:01:21
【问题描述】:

您好,我有一个从 2013 年 10 月到 2016 年 10 月的时间序列数据表。我想绘制从 2013 年 10 月到 2014 年 11 月、2014 年 10 月到 2015 年 11 月和 2015 年 10 月到 2016 年 11 月的时间序列。在同一图表上分析任何季节性趋势。

我的想法是为每个子段创建单独的数据表,但是在 SAS 中是否有更简单的方法来执行此操作?

这是我要绘制其季节性的数据表示例。

【问题讨论】:

    标签: sas time-series


    【解决方案1】:

    我认为这里的工作流程是添加一个组变量,例如表示年份,对于您希望在一个绘图分组中绘制的所有行,该变量具有相同的值。

    然后,您可以在任何您想要的绘图类型中使用group 语句。比如:

    data stocks_years;
      set sashelp.stocks;
      date_year = intck('YEAR','01AUG1986'd,date,'c')+1986;
      date_month= month(date);
    run;
    
    proc sgplot data=stocks_years;
      vline date_month/response=close group=date_year stat=mean;
    run;
    

    这是一个示例,用于查看 SASHELP.STOCKS 数据集中三只股票的每月平均收盘价。这当然是一个可怕的情节,但它应该让你对它的外观有所了解。这些不同颜色的线中的每一个都来自不同的年份(aug-> jul 被定义为一年,数字是 aug 的年份)。

    【讨论】:

    • 为什么选择 sgplot? GTL 或破产!
    • 肯定是 GTL :)
    【解决方案2】:

    乔提供的引导给了我所需的一切。这是完整的代码供其他人参考。

    %macro Plot_Seasonal_Worse_TP(tbl_name, tp, cutoff_date);
    /*tp = transition probability */
    
    proc sql;
    create table &tbl_name._trim as 
        SELECT * 
        FROM &tbl_name 
        WHERE asofdt > &cutoff_date;
    run;
    
    data &tbl_name._trim;
    set &tbl_name._trim;
        date_year = intck('YEAR','01NOV2013'd,asofdt,'c')+2014;
        date_month= MOD(month(asofdt)+2, 12);   /* move november and december of previous year to front of time series */
    run;
    
    proc sgplot data=&tbl_name._trim;
      vline date_month/response=&tp group=date_year;
      title &tbl_name  (&tp);
    run;
    
    %mend Plot_Seasonal_Worse_TP;
    

    输出也是这样的。

    【讨论】:

    猜你喜欢
    • 2019-12-04
    • 1970-01-01
    • 2020-07-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 2020-01-20
    • 2011-12-17
    • 1970-01-01
    相关资源
    最近更新 更多