Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.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
SAS如何计算具有特定滞后的观测值_Sas_Lag - Fatal编程技术网

SAS如何计算具有特定滞后的观测值

SAS如何计算具有特定滞后的观测值,sas,lag,Sas,Lag,假设数据集有两列 Date Time Price 01-03 11:00 1 01-03 11:02 2 01-03 11:02 3 01-03 11:03 4 01-03 11:07 5 01-04 11:00 4 01-04 11:01 6 01-04 11:01 7 我需要添加一个新列,该列等于当天最近几分钟的公布价格。如果此分钟有多个价格,则应选择第一个。比如说 Date

假设数据集有两列

Date   Time     Price  
01-03  11:00      1
01-03  11:02      2
01-03  11:02      3
01-03  11:03      4
01-03  11:07      5
01-04  11:00      4
01-04  11:01      6
01-04  11:01      7 
我需要添加一个新列,该列等于当天最近几分钟的公布价格。如果此分钟有多个价格,则应选择第一个。比如说

Date   Time     Price   New
01-03  11:00      1      2
01-03  11:02      2      4
01-03  11:02      3      4
01-03  11:03      4      5
01-03  11:07      5      . 
01-04  11:00      4      6
01-04  11:01      6      .
01-04  11:01      7      .

我按日期使用代码;如果是第一次;解决了多日期的问题。由于时间间隔不是固定的,所以在这种情况下我不能使用滞后函数。所以我不知道如何选择下一分钟的第一个价格。谁能给我一些解决办法吗?THX

仅使用基本SAS,这并不是特别困难,尽管这不是最有效的方法,但如果您有非常大的数据集,这通常应该可以执行

我们从下一行开始迭代数据集,直到找到一行具有不同的时间或日期。如果时间不同,则将该价格另存为新价格,如果日期或EOF不同,则清除新价格变量

data have;
input Date :$5. Time :time5. Price;
format time time5.;
datalines;
01-03  11:00      1
01-03  11:02      2
01-03  11:02      3
01-03  11:03      4
01-03  11:07      5
01-04  11:00      4
01-04  11:01      6
01-04  11:01      7 
;;;;
run;

data want;
  set have nobs=nobs;
  do _i = _n_ to nobs until (new_date ne date or new_time > time);
    set have(rename=(date=new_date price=new_price time=new_time)) point=_i;
  end;
  if (date ne new_date) or (_i > nobs) then call missing(new_price);  *times that it searched beyond limits;
run;

你们有SAS ETS吗?您可以查看proc扩展到“向前看”。谢谢,这段代码看起来很棒。你介意我再问一个问题吗。如果我想得到固定时间间隔的新价格,比如观察后五分钟?只需将其添加到直到条款中-直到新时间ge时间+300或任何合适的时间。但是,一旦您开始从当前行进一步跟踪数据集,与其他解决方案相比,这种方法的性能会变得更差。