2014-12-23 2 views
0

У меня есть набор данных (см. Рисунок ниже). Мне нужно заполнить столбец stitched_price. Для строки 1 мне нужно использовать значение из «цены». Это работает.Как создать переменную SAS, которая зависит от самого себя?

Для ряда строк 2, мне нужно сделать следующее: stitched_price = lag(stitched_price) * (trade_return + 1). Однако это не работает и оставляет все строки> 1 пустым.

Вот мой код:

data test2; 
    set test; 
    if _N_ = 1 then stitched_price = price; 
    else stitched_price = lag(stitched_price) * (1 + trade_return); 
run; 

Я не знаю, почему это происходит. Я понимаю, что есть сложности, связанные с использованием задержки в выражении if, но есть ли способ обойти это?

This is the result of the code. Prior to running the code, everything is the same except for the absence of the stitched_price variable.

+0

возможный дубликат [функция задержки не работает в SAS] (http://stackoverflow.com/questions/9484728/lag-function-doesnt-work-in-sas) –

+0

@RobertPenridge Не верно. Я прочитал этот вопрос, который заставил меня поверить, что приведенный выше код будет работать. Требуется значительно больше усилий, чтобы печатать и делать скриншоты моей работы, чем просто искать ее. Я спросил только после поиска нескольких мест. – navkast

+0

Ответы на связанный вопрос обсуждают как правильно использовать 'lag()', так и упоминать использование оператора 'Сохранить' в качестве альтернативы. –

ответ

2

Попробуйте сохранить вместо:

data test2; 
    set test; 
    retain stitched_price; 
    if _N_ = 1 then stitched_price = price; 
    else stitched_price = stitched_price * (1 + trade_return); 
run; 

В общем лагом не работает в условных блоках. Если же хотите использовать задержку, это будет что-то вроде следующим образом:

data test2; 
    set test; 
    lag_s=lag(stitched_price); 
    if _N_ = 1 then stitched_price = price; 
    else stitched_price = lag_s * (1 + trade_return); 
run; 

Вот старше сообщение о том, почему задержка не работает, и я уверен, что Google имеет много других: lag function doesn't work in SAS

+0

Ваш ответ сохраняется! Я полностью забыл о заявлении о сохранении. К сожалению. – navkast