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 中获得这些值?
编辑
您可以使用一周间隔的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;
我有一个股票价格数据集。显然,它仅包含证券交易所运营期间的观察结果。此外,数据集始于 2007 年 1 月 2 日。
我想要获得的是 2007 年的每周价格差异除以一周前的价格。
我不知道该怎么做。大多数 SAS 4GL 过程不提供对当前行之外的其他行的访问。 retain
将不起作用,因为有 7 个以前的值需要以 FIFO 方式记住和访问。此外,我不能使用 lag()
因为我不知道与读取值中测量的先前值的距离。有节假日等等,所以距离不固定。
如何在 SAS 4GL 中获得这些值?
编辑
您可以使用一周间隔的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;