SAS 4GL - 如何计算不连续数据集中的每周股票价值差异?

SAS 4GL - How to compute weekly stock value differences from discontinous dataset?

我有一个股票价格数据集。显然,它仅包含证券交易所运营期间的观察结果。此外,数据集始于 2007 年 1 月 2 日。

我想要获得的是 2007 年的每周价格差异除以一周前的价格。

我不知道该怎么做。大多数 SAS 4GL 过程不提供对当前行之外的其他行的访问。 retain 将不起作用,因为有 7 个以前的值需要以 FIFO 方式记住和访问。此外,我不能使用 lag() 因为我不知道与读取值中测量的先前值的距离。有节假日等等,所以距离不固定。

如何在 SAS 4GL 中获得这些值?

编辑

sample data

您可以使用一周间隔的intnx函数。使用 SQL 您可以将 table 连接到自身并在连接条件中使用 intnx。假设您的日期是 SAS 日期,这是围绕 sashelp.stocks 示例设计的代码。

proc sql;
create table want as
select a.stock, a.date, b.date as date7, 
    a.price, b.price as price7, 
    a.price-b.price as price_diff
from have as a
left join have as b
on a.stock=b.stock
and a.date=intnx('day', b.date, -7)
order by a.stock, a.date;
quit;