Это мой первый пост, поэтому, пожалуйста, дайте мне знать, если я недостаточно понимаю. Вот что я пытаюсь сделать - это мой набор данных. Мой подход к этому - цикл do с задержкой, но результат - мусор.
data a;
input @1 obs @4 mindate mmddyy10. @15 maxdate mmddyy10.;
format mindate maxdate date9.;
datalines;
1 01/02/2013 01/05/2013
2 01/02/2013 01/05/2013
3 01/02/2013 01/05/2013
4 01/03/2013 01/06/2013
5 02/02/2013 02/08/2013
6 02/02/2013 02/08/2013
7 02/02/2013 02/08/2013
8 03/10/2013 03/11/2013
9 04/02/2013 04/22/2013
10 04/10/2013 04/22/2013
11 05/04/2013 05/07/2013
12 06/10/2013 06/20/2013
;
run;
Теперь я пытаюсь создать новый столбец - «Замена» на основе следующей логики:
- Если Mindate записи происходит до maxdate ее лага, она не может быть ее заменой. Если это невозможно заменить, переходите вперед (так, 2,3,4 не могут заменить 1, а 5 можно).
- В противном случае ... если значение меньше 30 дней, Replacement = Y. Если нет, replace = N. Как только запись заменяет другую (так, в этом случае 5 действительно заменяет 1, потому что 02.02.2013 равно ‹30 чем 01/05/2013, он не может дублироваться в качестве замены для другой записи. Но если это N для одной записи выше, это все равно может быть Y для какой-то другой записи. Итак, 6 теперь оценивается против 2, 7 против 3 и т. д. Поскольку обе эти комбинации равны "Y", 8 теперь оценивается по сравнению с 4, но поскольку его значение> 30 относительно maxdate 4, это N. Но затем оно сравнивается с
- И так далее...
Я бы сказал, что в наборе данных из 100 записей это будет означать, что 100-я запись может технически заменить 1-ю, поэтому я пробовал лаги внутри циклов. Любые советы / помощь приветствуются! Ожидаемый результат:
obs mindate maxdate Replacement
1 02JAN2013 05JAN2013
2 02JAN2013 05JAN2013
3 02JAN2013 05JAN2013
4 03JAN2013 06JAN2013
5 02FEB2013 08FEB2013 Y
6 02FEB2013 08FEB2013 Y
7 02FEB2013 08FEB2013 Y
8 10MAR2013 11MAR2013 Y
9 02APR2013 22APR2013 Y
10 10APR2013 22APR2013 N
11 04MAY2013 07MAY2013 Y
12 10JUN2013 20JUN2013 Y