* Требуется подсчитать число дней между двумя датами (cis_beg и cis_end), которые попадают в некоторый "интервал годности" (Eligibility Period).
* Интервал - с 1.1.2003 по 1.31.2003, т.е. максимум - 31 день.
* Размещено в SPSS newsgroup 06.06.2004. Автор: Raynald Levesque.
* Обратите внимание, в примере дата приводится в американском формате (месяц, день, год) - А.Б.
DATA LIST LIST /cis_beg (ADATE11) cis_end (ADATE11).
BEGIN DATA
01/05/2003 01/05/2003
01/01/2003 01/31/2003
12/15/2002 02/02/2003
12/28/2002 01/15/2003
12/12/2002 12/18/2002
01/05/2003 05/04/2003
01/05/2003 01/07/2003
END DATA.
FORMATS cis_beg cis_end (ADATE11).
* Чтобы алгоритм был более понятен, используются две инструкции COMPUTE.
* В принципе, они могут быть объединены в одну.
COMPUTE dur=CTIME.DAYS(
MIN(DATE.DMY(31,1,2003),cis_end) -
MAX(DATE.DMY(1,1,2003),cis_beg)
) .
COMPUTE dayselig=MAX(0, dur + 1).
LIST.
* Вот результат:
cis_beg cis_end dur dayselig
01/05/2003 01/05/2003 .00 1.00
01/01/2003 01/31/2003 30.00 31.00
12/15/2002 02/02/2003 30.00 31.00
12/28/2002 01/15/2003 14.00 15.00
12/12/2002 12/18/2002 -14.00 .00
01/05/2003 05/04/2003 26.00 27.00
01/05/2003 01/07/2003 2.00 3.00