8.8.2 Второй пример: вычисление даты пасхи
Никейский собор в 325 г. установил, что пасху следует праздновать в первое воскресенье после первого весеннего полнолуния. На этом основан метод Гаусса для определения даты пасхального воскресенья. Согласно нему, если задан год jahr (например, 1994), то дату пасхального воскресенья, можно вычислить с помощью следующих операций:
k = целый результат деления jahr/100
р = целый результат деления k/3
q = целый результат деления k/4
m = 15 + k — p — q
ml = остаток от деления т/30
n = 4 + k - q
nl = остаток от деления п/7
а = остаток от деления jahr/19
Ь = остаток от деления jahr/4
с = остаток от деления jahr/7
d = 19 * а + ml
dl = остаток от деления d/30
e = 2*b + 4*c + 6*dl + nl
el = остаток от деления е/7
х = 22 + dl + el
Для определения х существует два исключения
Если x=57, то х принимается равным 50
Если d1=28 и el=6, а остаток деления в выражении (11*m+11)/30 меньше 19, то х принимается равным 49
Пасхальное воскресенье выпадает на х-ое марта или, если х больше 31, — на х— 31-ое апреля. Этот алгоритм дает превосходный пример для знакомства с арифметическими функциями TRUNC и MOD (см. раздел 7.1.3). Кроме того, можно еще раз потренироваться в использовании оператора IF (раздел 8.4).
Сначала в редакторе данных следует создать файл данных, содержащий единственную переменную jahr. Затем в строках редактора необходимо ввести годы, для которых вы желаете вычислить дату пасхи. Можно также загрузить файл примеров ostern.sav, содержащий годы с 1995 по 2030.
Затем откройте редактор синтаксиса и введите следующую программу. Команды COMPUTE вплоть до вычисления х можно также ввести в соответствующем диалоговом окне (см. раздел 8.1). Команды, приведенные ниже, вводятся в редакторе синтаксиса. Для того, чтобы избежать ручного ввода этой программы, можно просто загрузить в редактор синтаксиса файл ostern.sps.
COMPUTE k=TRUNC(jahr/100) .
COMPUTE p=TRUNC(k/3) .
COMPUTE q=TRUNC(k/4) .
COMPUTE m=15+k-p-q .
COMPUTE ml=MOD(m,30) .
COMPUTE n=4+k-g .
COMPUTE nl=MOD(n,7) .
COMPUTE a=MOD(jahr,19) .
COMPUTE b=MOD(jahr,4) .
COMPUTE c=MOD(jahr,7)
COMPUTE d=19*a+ml .
COMPUTE dl=MOD(d,30) .
COMPUTE e=2*b+4*c+6*dl+nl .
COMPUTE el=MOD(e,7) .
COMPUTE x=22+dl+el .
IF x=57 x=50 .
IF dl=28 AND el=6
AND MOD (ll*m+ll,30)<19 x=49 .
COMPUTE tag=x .
COMPUTE monat=3 .
IF (x > 31) tag=x-31 .
IF (x > 31) monat=4 .
COMPUTE odatum=DATE.MDY(raonat,tag,jahr) .
FORMATS odatum(DATEll) .
LIST odatum .
Переменные tag и monat определяют дату пасхального воскресенья заданного года (переменной jahr). На их основе функция DATE.MDY вычисляет значение времени во внутреннем формате SPSS (число секунд после введения григорианского календаря). Затем это значение записывается в переменную odatum, которая преобразуется в формат даты DATE11.
После ввода программы или открытия файла в редакторе синтексиса с помощью меню Edit (Правка) выделите все строки и запустите программу. С помощью команды LIST в окне просмотра буде сформирована следующая таблица, фрагмент которой с 1995 до 2002 года, приводится ниже:
ODATUM
16-APR-1995
07-APR-1996
30-MAR-1997
12-APR-1998
04-APR-1999
23-APR-2000
15-APR-2001
31-MAR-2002
Обладая некоторой фантазией и знанием командного синтаксиса SPSS, можно решать задачи, не связанные непосредственно со статистическими вычислениями.