假设数据集有两列
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 .
我使用代码(by date; if first.time;
)来解决多个日期的问题。由于时间之间的差距不固定,在这种情况下我不能使用滞后函数。所以我不知道如何选择下一个最近一分钟的第一个价格。有人能给我一些解决方案吗? THX
答案 0 :(得分:1)
只使用基础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;