SAS——如何从价格数据计算回报?

SAS——如何从价格数据计算回报?,sas,Sas,我正在使用SAS。我有一个名为EOD_close_rtn的数据集,如下所示: date CF888 A9888 AG888 AL888 AU888 C9888 CU888 ER888 IF888 J9888 4-Jun-13 20220 4828 4621 14855 281.11 2434 53060 2628 2561.4 1489 5-Jun-13 20210 4827 4620

我正在使用SAS。我有一个名为EOD_close_rtn的数据集,如下所示:

date        CF888   A9888   AG888   AL888   AU888   C9888   CU888   ER888   IF888   J9888
4-Jun-13    20220   4828    4621    14855   281.11  2434    53060   2628    2561.4  1489
5-Jun-13    20210   4827    4620    14850   281.1   2435    53080   2627    2561.6  1489
6-Jun-13    20215   4829    4621    14860   281.14  2435    53080   2627    2561.4  1491

第一列是日期,其余列是与顶部合同名称对应的价格。我想计算每个合同的每日回报,并且输出应该是相同的格式。我尝试使用LAG函数,但不知道如何将相同的函数应用于所有列

如果您只需要滚动差异,那么您可以使用滞后和数组。适用带有滞后的标准警告;LAG不会检索以前的记录,而是在每次调用时创建一个队列并添加/弹出,因此不要在条件语句(如IF)中使用它,除非您知道自己在做什么

data have;
input date :date9. CF888   A9888   AG888   AL888   AU888   C9888   CU888   ER888   IF888   J9888;
format date date9.;
datalines;
04Jun2013    20220   4828    4621    14855   281.11  2434    53060   2628    2561.4  1489
05Jun2013    20210   4827    4620    14850   281.1   2435    53080   2627    2561.6  1489
06Jun2013    20215   4829    4621    14860   281.14  2435    53080   2627    2561.4  1491
;;;;
run;

data want;
set have;
array contracts cf888--j9888;
do _t = 1 to dim(contracts);
  contracts[_t] = contracts[_t] - lag(contracts[_t]);
end;
run;

我也会考虑改变你的数据结构;如果您有一个垂直结构,即每个合同每个日期一行,而不是每个日期一行,则这种情况更容易计算。

您的问题不明确,能否根据您提供的示例输入数据添加输出数据的视图。