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或任何合适的时间。但是,一旦您开始从当前行进一步跟踪数据集,与其他解决方案相比,这种方法的性能会变得更差。