Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 在SAS中每两行循环一次_Loops - Fatal编程技术网

Loops 在SAS中每两行循环一次

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将其

我的数据集看起来像这样

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将其引用到每秒的观测值中,我认为您只需要
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()
实际上从函数的先前执行中提取值,而不是从先前的观察中提取值。因此,如果跳过在每次观察中执行它,返回的值将不是上一次观察中的值