該數據集包含不同公司的每日(營業日)時間序列。還有一個指標變量(ind)取值爲1或0.如果給定公司的ind爲1,那麼我想要在指標事件之前的某個時間範圍內構建數據集的子樣本,包括該公司的所有條目。根據當前行的條件選擇以前的行
我們可以把下面的示例數據:
day company ind
2012-01-11 A 0
2012-01-11 B 0
2012-01-11 C 0
2012-01-12 A 0
2012-01-12 B 0
2012-01-12 C 0
2012-01-13 A 0
2012-01-13 B 1
2012-01-13 C 0
2012-01-16 A 0
2012-01-16 B 0
2012-01-16 C 0
2012-01-17 A 1
2012-01-17 B 0
2012-01-17 C 0
2012-01-18 A 0
2012-01-18 B 1
2012-01-18 C 0
我的目標是包括其各自的事件之前指示器事件公司A和B的時間範圍(-2天-1天)一個子樣本(確保在此時間範圍內,各公司不存在其他事件)。這將是我想要的結果:
day company ind
2012-01-11 B 0
2012-01-12 B 0
2012-01-13 A 0
2012-01-13 B 0
2012-01-16 A 0
2012-01-16 B 0
2012-01-17 B 0
下面的代碼工作,如果在數據集中只有一個公司只有一個指標事件:
CREATE TABLE temp AS
SELECT Row_Number() OVER (PARTITION BY company ORDER BY day) AS rowid, *
FROM mytable
CREATE TABLE window AS SELECT *
FROM temp t1
WHERE company IN (
SELECT company
FROM temp t2
WHERE t2.ind = 1)
AND rowid BETWEEN((SELECT rowid FROM temp where ind = 1) - 2)
AND ((SELECT rowid FROM temp where ind = 1) -1)
但是我真的在努力程度上它例如數據集中有多個事件公司,並且每個公司可能有多個事件。
你有什麼想法如何解決這個問題?
似乎最簡單的用'LEAD()'功能,它允許你這樣做評估當前行的「行前」行中的數據。 –
感謝您的建議。在我的代碼中,哪裏可以使用LEAD()函數? @GoatCO – user3319629