SAS-观测1减去观测2
我想计算时间t的价格减去时间t+1的价格,对于第k天的证券I。特别地,t+1被定义为在时间t的价格之后至少5分钟的价格。因此,我添加了一个变量来调节时间间隔,并使用以下代码在时间t+1创建一行价格。 这是输入数据的示例SAS-观测1减去观测2,sas,Sas,我想计算时间t的价格减去时间t+1的价格,对于第k天的证券I。特别地,t+1被定义为在时间t的价格之后至少5分钟的价格。因此,我添加了一个变量来调节时间间隔,并使用以下代码在时间t+1创建一行价格。 这是输入数据的示例 data test4; length _ric$ 25 type$ 5 interval$ 15 time_l_$ 25 ; input _ric$ date_l_ time_l_ type$ price interval$;
data test4;
length _ric$ 25 type$ 5 interval$ 15 time_l_$ 25 ;
input _ric$ date_l_ time_l_ type$ price interval$;
datalines;
AXPA031407800.U 20131212 9:52:56.537 Trade 5.85 09:50:00
AXPA031407800.U 20131212 9:52:56.537 Trade 5.85 09:50:00
AXPA031407800.U 20131212 9:53:13.586 Trade 5.8 09:50:00
AXPA031407800.U 20131212 9:53:13.586 Trade 5.8 09:50:00
AXPA031407800.U 20131212 9:53:13.607 Trade 5.8 09:50:00
AXPA031407800.U 20131212 9:53:13.607 Trade 5.8 09:50:00
AXPA031407800.U 20131212 9:53:34.990 Trade 5.8 09:50:00
AXPA031407800.U 20131212 9:55:12.990 Trade 5.7 09:55:00
AXPA031407800.U 20131212 9:55:12.990 Trade 5.7 09:55:00
AXPA031407800.U 20131212 9:55:13.002 Trade 5.7 09:55:00
AXPA031407800.U 20131212 9:55:13.002 Trade 5.7 09:55:00
AXPA031407800.U 20131212 9:55:13.002 Trade 5.7 09:55:00
AXPA031407800.U 20131212 9:55:13.011 Trade 5.7 09:55:00
AXPA031407900.U 20131205 9:37:58.420 Trade 6.25 09:35:00
AXPA031407900.U 20131205 9:39:04.996 Trade 6.25 09:35:00
AXPA031407900.U 20131205 9:39:04.996 Trade 6.25 09:35:00
AXPA031407900.U 20131205 9:39:04.996 Trade 6.25 09:35:00
AXPA031407900.U 20131205 9:39:04.996 Trade 6.25 09:35:00
AXPA031407900.U 20131205 9:39:04.996 Trade 6.25 09:35:00
;
data test1;
set test nobs=nobs;
do _i = _n_ to nobs until (new_date ne date_l_ or new_time > interval);
set test (rename=(date_l_=new_date price=new_price interval=new_time)) point=_i;
end;
if (date_l_ ne new_date) or (_i > nobs) then call missing(new_price);
run;
输出数据如下所示。但是,RIC(安全名称)、日期和时间会发生更改。例如,如输出数据所示,AXPA031407800.U在输入数据中有13个观察值,但在输出数据中有7个观察值
_ric type interval time_l_ date_l_ price new_date new_time new_price
AXPA031407800.U Trade 09:50:00 9:55:12.990 20131212 5.85 20131212 09:55:00 5.7
AXPA031407800.U Trade 09:50:00 9:55:12.990 20131212 5.85 20131212 09:55:00 5.7
AXPA031407800.U Trade 09:50:00 9:55:12.990 20131212 5.8 20131212 09:55:00 5.7
AXPA031407800.U Trade 09:50:00 9:55:12.990 20131212 5.8 20131212 09:55:00 5.7
AXPA031407800.U Trade 09:50:00 9:55:12.990 20131212 5.8 20131212 09:55:00 5.7
AXPA031407800.U Trade 09:50:00 9:55:12.990 20131212 5.8 20131212 09:55:00 5.7
AXPA031407800.U Trade 09:50:00 9:55:12.990 20131212 5.8 20131212 09:55:00 5.7
AXPA031407900.U Trade 09:55:00 9:37:58.420 20131212 5.7 20131205 09:35:00
AXPA031407900.U Trade 09:55:00 9:37:58.420 20131212 5.7 20131205 09:35:00
AXPA031407900.U Trade 09:55:00 9:37:58.420 20131212 5.7 20131205 09:35:00
AXPA031407900.U Trade 09:55:00 9:37:58.420 20131212 5.7 20131205 09:35:00
AXPA031407900.U Trade 09:55:00 9:37:58.420 20131212 5.7 20131205 09:35:00
AXPA031407900.U Trade 09:55:00 9:37:58.420 20131212 5.7 20131205 09:35:00
AXPA031407900.U Trade 09:35:00 9:39:04.996 20131205 6.25 20131205 09:35:00
AXPA031407900.U Trade 09:35:00 9:39:04.996 20131205 6.25 20131205 09:35:00
AXPA031407900.U Trade 09:35:00 9:39:04.996 20131205 6.25 20131205 09:35:00
AXPA031407900.U Trade 09:35:00 9:39:04.996 20131205 6.25 20131205 09:35:00
AXPA031407900.U Trade 09:35:00 9:39:04.996 20131205 6.25 20131205 09:35:00
AXPA031407900.U Trade 09:35:00 9:39:04.996 20131205 6.25 20131205 09:35:00
这是我的目标结果,它创建了一个新变量Price\u next\u interval。新变量表示同一天下一个区间的价格
_RIC Date_l_ time_l_ type Price interval Price_next_interval
AXPA031407800.U 20131212 9:52:56.537 Trade 5.85 09:50:00 5.7
AXPA031407800.U 20131212 9:52:56.537 Trade 5.85 09:50:00 5.7
AXPA031407800.U 20131212 9:53:13.586 Trade 5.8 09:50:00 5.7
AXPA031407800.U 20131212 9:53:13.586 Trade 5.8 09:50:00 5.7
AXPA031407800.U 20131212 9:53:13.607 Trade 5.8 09:50:00 5.7
AXPA031407800.U 20131212 9:53:13.607 Trade 5.8 09:50:00 5.7
AXPA031407800.U 20131212 9:53:34.990 Trade 5.8 09:50:00 5.7
AXPA031407800.U 20131212 9:55:12.990 Trade 5.7 09:55:00 .
AXPA031407800.U 20131212 9:55:12.990 Trade 5.7 09:55:00 .
AXPA031407800.U 20131212 9:55:13.002 Trade 5.7 09:55:00 .
AXPA031407800.U 20131212 9:55:13.002 Trade 5.7 09:55:00 .
AXPA031407800.U 20131212 9:55:13.002 Trade 5.7 09:55:00 .
AXPA031407800.U 20131212 9:55:13.011 Trade 5.7 09:55:00 .
AXPA031407900.U 20131205 9:37:58.420 Trade 6.25 09:35:00 6.28
AXPA031407900.U 20131205 9:45:04.996 Trade 6.28 09:45:00 6.29
AXPA031407900.U 20131205 9:45:04.996 Trade 6.28 09:45:00 6.29
AXPA031407900.U 20131205 9:55:04.996 Trade 6.29 09:55:00 .
AXPA031407900.U 20131205 9:55:04.996 Trade 6.29 09:55:00 .
AXPA031407900.U 20131205 9:55:04.996 Trade 6.29 09:55:00 .
我认为,通过分组处理和
保留
比点
更容易做到这一点:
data test4;
length _ric$ 25 type$ 5;
input _ric $ date_l_ :yymmdd8. time_l_ :time. type$ price interval :time. price_next_interval_goal;
format date_l_ yymmddn8. time_l_ interval time.;
datalines;
AXPA031407800.U 20131212 9:52:56.537 Trade 5.85 09:50:00 5.7
AXPA031407800.U 20131212 9:52:56.537 Trade 5.85 09:50:00 5.7
AXPA031407800.U 20131212 9:53:13.586 Trade 5.8 09:50:00 5.7
AXPA031407800.U 20131212 9:53:13.586 Trade 5.8 09:50:00 5.7
AXPA031407800.U 20131212 9:53:13.607 Trade 5.8 09:50:00 5.7
AXPA031407800.U 20131212 9:53:13.607 Trade 5.8 09:50:00 5.7
AXPA031407800.U 20131212 9:53:34.990 Trade 5.8 09:50:00 5.7
AXPA031407800.U 20131212 9:55:12.990 Trade 5.7 09:55:00 .
AXPA031407800.U 20131212 9:55:12.990 Trade 5.7 09:55:00 .
AXPA031407800.U 20131212 9:55:13.002 Trade 5.7 09:55:00 .
AXPA031407800.U 20131212 9:55:13.002 Trade 5.7 09:55:00 .
AXPA031407800.U 20131212 9:55:13.002 Trade 5.7 09:55:00 .
AXPA031407800.U 20131212 9:55:13.011 Trade 5.7 09:55:00 .
AXPA031407900.U 20131205 9:37:58.420 Trade 6.25 09:35:00 6.28
AXPA031407900.U 20131205 9:45:04.996 Trade 6.28 09:45:00 6.29
AXPA031407900.U 20131205 9:45:04.996 Trade 6.28 09:45:00 6.29
AXPA031407900.U 20131205 9:55:04.996 Trade 6.29 09:55:00 .
AXPA031407900.U 20131205 9:55:04.996 Trade 6.29 09:55:00 .
AXPA031407900.U 20131205 9:55:04.996 Trade 6.29 09:55:00 .
;
/* Sort into reverse order */
proc sort data = v_want out = want;
by descending date_l_ interval;
run;
/* Carry the price forward via retain if we've got to the last row for this interval */
/* N.B. do not populate retained figure until after the row has been output*/
/* Clear the carried-forward figure at the start of each date*/
data want2;
set test4;
by descending date_l_ descending interval;
if first.date_l_ then call missing(price_next_interval);
output;
retain price_next_interval;
if last.interval then price_next_interval = price;
run;
/*Sort back into original order*/
proc sort data = want2;
by descending date_l_ interval;
run;
请提供一些纯文本格式的输入和输出数据示例。否则,您实际上是在要求他人为您转录数据。我添加了一个输入和输出数据示例,谢谢。这很好-请您也添加一个您所需输出的示例。谢谢您的建议。我提供了一个所需的输出,该输出创建了一个新变量来表示同一天下一个区间的价格。如果下一个区间有多个价格,您希望使用哪一个?