我有以下的數據集,結構如下:條件IF語句與滯後值
DATE PERCENTAGE FLAG VALUE1
01JAN2017 0.21 1 1.50
04JAN2017 0.05 0 2.43
09JAN2017 0.06 1 2.21
24JAN2017 0.15 1 1.13
我有新的變量添加到數據集,使得這些變量將滿足以下條件:
- 在殼體
FLAG
等於1,它的第一行,則:
NEW_VAR_1 is equal to 500 * PERCENTAGE; NEW_VAR_2 is equal to NEWVAR_1 * (VALUE1 - 1); NEW_VAR_3 is equal to 500 + NEWVAR_2;
- 在這種情況下
FLAG
等於1,它不是第一行,則: - 在這種情況下是
FLAG
等於0,則所有的NEWVAR_
值必須被失蹤設置。
NEW_VAR_1 is equal to LAG(NEWVAR_3) * PERCENTAGE; NEW_VAR_2 is equal to NEWVAR_1 * (VALUE1 - 1); NEW_VAR_3 is equal to LAG(NEWVAR_3) + NEWVAR_2;
我需要運行在SAS這個劇本,我寫了下面的腳本下做到這一點:
DATA BACKTESTING;
SET BACKTESTING;
IF _N_ EQ 1 AND FLAG EQ 1 THEN DO;
K = 500;
NEWVAR_1 = PERCENTAGE * K;
NEWVAR_2 = NEWVAR_1 * (VALUE_1 - 1);
NEWVAR_3 = K + NEWVAR_2;
END;
ELSE IF _N_ GT 1 AND FLAG EQ 1 THEN DO;
NEWVAR_1 = PERCENTAGE * LAG(NEWVAR_3);
NEWVAR_2 = NEWVAR_1 * (VALUE_1 - 1);
NEWVAR_3 = K + NEWVAR_2;
END;
END;
RUN;
該腳本正常工作,在這個意義上,我沒有看到錯誤或警告消息在日誌窗口,但是,正如您通過閱讀腳本可以注意到的那樣,它會在滯後變量中找到缺失值時返回缺失值。
有沒有辦法克服這個問題,爲了能讓SAS只有在FLAG
等於1時纔會採用NEWVAR_3
的滯後?
在此希望我已經在這個問題不夠清楚,感謝所有預先的幫助!
感謝@Tom提供的解釋和腳本示例。 – Quantopik