Рассчитать число дней, попадающих в заданный интервал
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | * Требуется подсчитать число дней между двумя датами (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 |