SAS_State空间模型

时间:2017-11-01 08:12:59

标签: sas

我想问一个与State Space程序有关的问题。我有一个包含一百万个组的庞大数据集。我需要使用状态空间模型找到每个组的永久和暂时组件。我运行以下代码:

 proc ucm data=work;
 model price;
 by group;
 irregular plot=smooth;
 level checkbreak plot=smooth;
 estimate plot=residual;
 forecast plot=forecasts lead=10 alpha=0.5;
 run;

此代码效果很好。我只有一个问题。由于我有大量的团体,需要花费很多时间(大约3个月)。你知道我可以用什么方法/方法来提高效率和减少时间 在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

PROC UCM可让您输出参数估算值&没有任何ODS输出的预测表。 UCM本身就是一个计算成本很高的模型,并且按群组绘制每个预测都会对系统产生很大的影响。相反,请使用PROC UCM禁用noprint的任何输出,创建两个包含估算值的out表格。预测,并在外部打印日志。

根据数据的大小,您可能需要考虑查看Forecast Server,它旨在以高度的准确性和效率解决这个问题。如此众多的群体或观察结果存在一些预测问题,专业工具将极大地改善您的模型和制作它们的时间。

请尝试使用以下代码:

/* Print log externally */
proc printto log="C:\Log\Location\Here\log.txt" new;
run;

/* Create UCM with forecast & estimate output:
    - myForecast
    - myEstimates
*/
proc ucm data=work 
         outfor=myForecast
         outest=myEstimates
         noprint
         ;
    by group;
    model price;
    irregular;
    level checkbreak;
    estimate;
    forecast lead=10 alpha=0.5;
run;

/* Reset log to be internal */
proc printto log=log;
run;

proc print data=myEstimates;
run;

proc print data=myForecast;
run;

答案 1 :(得分:0)

高视图是Time~1 / Resources and Resources~Money。

您的轶事处理率是每小时463组。

  • 你减少时间的目标是什么?
  • 您使用的是什么硬件?

    • 你看过表演计吗?
    • 内存是否完全使用?如果是,您可以添加更多RAM。
    • CPU是否在所有核心上得到充分利用?如果是,您可以添加更多机器 - 如果您没有机器或SAS许可证进行额外安装,这可能意味着更多的钱。如果不是,您可以运行其他SAS会话以处理不同的组(称为这些分区)
  • 尝试对运行进行分区,以便一次处理K个组。

    • 有时,ODS输出是瓶颈,将新结果附加到活动ODS流需要很长时间。
    • 编码实验应该有一个包含基准性能的计划
    • 当N台机器处理数据时,每台机器都可以在自己的分区上工作。