Loops 在SAS中每两行循环一次
我的数据集看起来像这样 eom\U股票\U id股票\U回报基准\U回报Loops 在SAS中每两行循环一次,loops,Loops,我的数据集看起来像这样 eom\U股票\U id股票\U回报基准\U回报 201301X 0.98 0.99 201302X 1.03 1.01 201303x1.031 201301Y 0.99 0.99 201302Y 0.99 1.01 201303Y 1.02 1 对于每个股票回报基准回报,我必须执行一个操作,例如股票回报(1)*股票回报(2)-基准回报(1)*基准回报(2) i、 e.0.98*1.03-0.99*1.01 请帮助我如何使用do循环来完成它。我必须使用do loop将其
201301X 0.98 0.99
201302X 1.03 1.01
201303x1.031
201301Y 0.99 0.99
201302Y 0.99 1.01
201303Y 1.02 1 对于每个股票回报基准回报,我必须执行一个操作,例如股票回报(1)*股票回报(2)-基准回报(1)*基准回报(2) i、 e.0.98*1.03-0.99*1.01
请帮助我如何使用do循环来完成它。我必须使用do loop将其引用到每秒的观测值中,我认为您只需要
LAG()
上一行的值
让我们使用数据步骤来创建数据,但不要将月份值与stick id混合,而是将它们作为两个单独的变量。然后我们可以使用BY processing来判断新库存何时开始
data have ;
input month $6. stock_id $ stock_return benchmark_return ;
cards;
201301X 0.98 0.99
201302X 1.03 1.01
201303X 1.03 1
201301Y 0.99 0.99
201302Y 0.99 1.01
201303Y 1.02 1
;;;;
现在,要创建新变量,您只需要使用公式,但您需要确保不要在第一次观察时使用公式,因为滞后值适用于不同的股票
data want ;
set have ;
by stock_id month;
new = lag(stock_return)*stock_return-lag(benchmark_return)*benchmark_return;
if first.stock_id then new=.;
run;
请注意,您不希望将LAG()
函数调用放在条件函数中。LAG()
实际上从函数的先前执行中提取值,而不是从先前的观察中提取值。因此,如果跳过在每次观察中执行它,返回的值将不是上一次观察中的值