У меня есть набор торговых данных, которые имеют наблюдения в миллисекундах, но нечастые. Чтобы сделать это разумным временем, я создал макрос для построения сетки (по одному наблюдению в секунду). Теперь я хочу, чтобы мой набор данных, чтобы вписаться в сетку (суммируя объемы, которые случились в том, что второй и с использованием последней котировки/цена сделки. Я очень благодарен за любые идеи. Смотрите ниже код.SAS Составление/суммирование наблюдений за промежуток времени
Лучшие
%macro makeGrid;
proc sort data=data.inputdataset; by id date milliseconds descending type order; run;
options nomprint;
data data.outputgrid (keep=id date miliseconds type order);
set data.inputdataset;
by id date;
if first.date;
Type="grid"; Order=0;
%do i=((9*60*60)+(10*60)) %to ((16*60*60)+(50*60));
milliseconds=&i; output;
%end;
run;
options mprint;
%mend makeGrid;
очень отчаянная попытка была такова:
data data.merged;
merge data.outputgrid data.inputdataset;
by id date milliseconds;
if first.id then do;
if milliseconds collate = sum(volume)
run;
Сетка:
ID date time price volume
ABC 01/01/15 0801000
ABC 01/01/15 0802000
ABC 01/01/15 0803000
ABC 01/01/15 0804000
Пример данных:
ID date time price volume
ABC 01/01/15 0800004 1,55 100
ABC 01/01/15 0800110 1,56 200
ABC 01/01/15 0800152 1,52 300
ABC 01/01/15 0800210 1,51 400
ABC 01/01/15 0800352 1,50 200
ABC 01/01/15 0800384 1,51 400
Выход:
ID date time price volume
ABC 01/01/15 0801000 1,55 100
ABC 01/01/15 0802000 1,52 500
ABC 01/01/15 0803000 1,51 400
ABC 01/01/15 0804000 1,51 600
Если нет торговли в эту секунду, объем должен быть 0 и цена цена последнего секундная.
EDIT:
так, благодаря Chris я сделал сетку без макросов, но прок SQL не работает, как я хочу.
data grid1;
do seconds = '09:10't to '16:50't ;
output ;
end ;
/* id=.;*/
/* date=.;*/
/* format ric $12. ;*/
/* format Date best12. ;*/
run;
proc sql ;
create table want as
select a.id, a.date, a.miliseconds, sum(a.volume) as Volume
from have a
left join
grid1 b on a.id = b.id
and a.date = b.date
and a.miliseconds = floor(b.seconds)
group by a.id, a.date, a.miliseconds ;
quit;
run;
Таким образом, идентификатор и дата не найдены, поэтому я создал их на шаге данных. Но тогда id - это не тот же формат, который я пытался исправить, но не смог. Кажется, у меня ошибка при объединении набора данных с желанием, сопоставляя милисекунды между секундами линий сетки. Что мне не хватает? Всегда благодарен за ввод! Best
пожалуйста обеспечивают воспроизводимый пример того, что у вас есть и то, что вы хотите быть выходной – Altons