У меня есть набор данных, содержащий несбалансированную панель наблюдений, где я хочу пересылать и обратно заполнять пропущенные и / или «неправильные» наблюдения тикера самой последней не пропущенной строкой.
id time ticker_have ticker_want
------------------------------
1 1 ABCDE YYYYY
1 2 . YYYYY
1 3 . YYYYY
1 4 YYYYY YYYYY
1 5 . YYYYY
------------------------------
2 4 . ZZZZZ
2 5 ZZZZZ ZZZZZ
2 6 . ZZZZZ
------------------------------
3 1 . .
------------------------------
4 2 OOOOO OOOOO
4 3 OOOOO OOOOO
4 4 OOOOO OOOOO
По сути, если в наблюдении уже есть тикер, но этот тикер отличается от последнего непустого тикера, мы заменим этот тикер на последний тикер.
Пока мне удалось заполнить отсутствующие наблюдениявперед, используя этот код
proc sql;
create table have as select * from old_have order by id, time desc;
quit;
data want;
drop temp;
set have;
by id;
/* RETAIN the new variable*/
retain temp; length temp $ 5;
/* Reset TEMP when the BY-Group changes */
if first.id then temp=' ';
/* Assign TEMP when X is non-missing */
if ticker ne ' ' then temp=ticker;
/* When X is missing, assign the retained value of TEMP into X */
else if ticker=' ' then ticker=temp;
run;
Теперь я застрял, выясняя случаи, когда я не могу получить доступ к непропущенному значению, используя last.ticker
или first.ticker
...
Какможно ли сделать это с помощью DATA
или PROC SQL
или любых других команд SAS?