У меня есть следующий набор данных:
data have;
input year firm_id location_id action action_amount operate new_entry
;
cards;
2013 28013 6085 1 10000 0 0
2015 28013 6085 1 12000 0 0
2015 28013 29189 1 10000 0 0
2016 28013 34019 1 5000 1 1
2017 28013 34019 0 0 1 2
2011 120609 9003 1 7000 0 0
2012 120609 9003 0 0 1 1
2013 120609 9003 1 5000 1 2
2012 247908 23001 1 9000 0 0
2013 247908 23001 1 8000 0 0
2014 247908 23001 1 8500 1 1
2015 247908 23001 0 0 1 2
2003 356123 1001 0 0 0 0
2004 356123 1001 0 0 0 0
2009 356123 1001 1 9800 1 1
;
run;
Я хочу добавить дополнительные строки и две новые переменные с именами "pre_action" и "pre_action_amount", чтобы получить следующий набор данных:
data want;
input year firm_id location_id action action_amount operate new_entry pre_action pre_action_amount
;
cards;
2013 28013 6085 1 10000 0 0 . .
2014 28013 6085 0 0 0 0 1 10000
2015 28013 6085 1 12000 0 0 . .
2016 28013 6085 0 0 0 0 1 12000
2015 28013 29189 1 6500 0 0 . .
2016 28013 29189 0 0 0 0 1 6500
2016 28013 34019 1 5000 1 1 0 0
2017 28013 34019 0 0 1 2 . .
2011 120609 9003 1 7000 0 0 . .
2012 120609 9003 0 0 1 1 1 7000
2013 120609 9003 1 5000 1 2 . .
2012 247908 23001 1 9000 0 0 . .
2013 247908 23001 1 8000 0 0 1 9000
2014 247908 23001 1 8500 1 1 1 8000
2015 247908 23001 0 0 1 2 . .
2003 356123 1001 0 0 0 0 . .
2004 356123 1001 0 0 0 0 0 0
2005 356123 1001 0 0 0 0 0 0
2009 356123 1001 1 9800 1 1 0 0
;
run;
Правила таковы:
1) Сначала рассмотрим только те строки, которые имеют оператор = 0.
- Для каждой пары firm_id и location_id, если в следующем году нет строка с одинаковыми firm_id и location_id, затем создайте новую строку со следующим годом и той же парой firm_id и location_id. Все переменные action, action_amount, opera и new_entry установлены в 0, а pre_action и pre_action_amount установлены в значение action и action_amount в предыдущем году. Пример: в 2013 году для пары firm_id / location_id 28013/6085 мы работали = 0. Но в 2014 году нет никаких наблюдений для этой пары firm_id / location_id. Таким образом, мы устанавливаем action, action_amount, opera и new_entry равным 0 и pre_action = 1 и pre_action_amount = 10000, которые являются значениями для action и action_amount в 2013 году.
- Для каждой пары firm_id и location_id, если в следующем year есть строка с одинаковыми firm_id и location_id, затем просто установите pre_action и pre_action_amount равными значению action и action_amount в предыдущем году. Пример: в 2011 году для firm_id / location_id 120609/9003 мы работали = 0. Но в следующем 2012 году есть строка с этой парой firm_id / location_id. Поэтому мы устанавливаем pre_action = 1 и pre_action_amount = 7000, которые являются значениями для action и action_amount в 2011 году. Другой пример - в 2003 году для firm_id / location_id 356123 / 1001.
2) Теперь рассмотрим строки с new_entry = 1, которые еще не имеют значений pre_action и pre_action_amount. Установите pre_action и pre_action_amount равными 0.
3) Все остальные значения pre_action и pre_action_amount пусты.
Я не уверен, как создавать эти новые строки, учитывая сложные правила, описанные выше, любые была бы признательна за помощь.