Kalenderfrage zu Ostern

Hallo Forum!

Ich bin im Rahmen eines Programms zu einer kalendarischen Fragestellung über das Problem Ostern gestolpert.

Kennt jemand eine Funktion, mit der das Datum des Ostersonntags abgefragt werden kann?
An diesem hängen ja die meisten anderen -beweglichen- Feiertage.

Ist es möglich, dieses Datum mittels einer Funktion oder ähnlichem abzufragen?

Vielen Dank im voraus!

Viele Grüße
Andreas Windisch

Problem gelöst!!!

Hallo Forum!

Wenn ich gleich mit dem richtigen Schlagwort gesucht hätte, wäre die Frage überflüssig gewesen.

Es hat sich schon jemand die Mühe gemacht, ein entsprechendes SAS-Programm zu schreiben!

http://support.sas.com/ctx/samples/index.jsp?sid=1566&tab=details

Hier ist -meiner Auffassung nach- die Osterformel von Gauß abgebildet!!!

Vielen Dank an alle die sich bereits Gedanken gemacht, haben aber vielleicht kommt ja noch eine elegantere Lösung zu Tage.

Viele Grüße
Andreas Windisch

P.S. Bei meinen Grund-Problem handelt es sich um eine etwas komplexere Berechnung von bestimmten Tagen, an dem ein Programm laufen soll.

SAS Programm zur Berechnung von Ostern nach Gauss

Da ich es gerade mal benötigt habe (HOST, MVS und SAS 8.2) stelle ich es gern zur Verfügung:

/*********************************************************************
  Berechnung des Datums von Ostern nach Gauss
  Berechnung zwischen 1700 und 2199 (!)
----------------------------------------------------------------------
  Wann wird Ostern gefeiert? Wie erfaehrt man das Osterdatum für ein
  bestimmtes Jahr, ohne in einen Kalender zu schauen?
  Ostern ist ein "bewegliches" Fest. Es wird am ersten Sonntag nach dem
  ersten Frühlingsvollmond gefeiert. Damit ist der 22. Maerz der
  frueheste Termin, der 25. April der letzte, auf den Ostern fallen
  kann. Von diesem Termin haengen auch die Feste Christi Himmelfahrt,
  das 40 Tage nach Ostern, und Pfingsten, das 50 Tage nach Ostern
  gefeiert wird, ab. Von
   Carl Friedrich Gauß (Mathematiker, Astronom und Physiker; 1777-1855)
  stammt ein Algorithmus, der es erlaubt ohne Kenntnis des Mondkalenders
  die Daten der Osterfeste für die Jahre 1700 bis 2199 zu bestimmen.

  Literatur Quelle:
    Schüler-Rechenduden
    Bibliographisches Institut
    Mannheim, 1966
**********************************************************************/
%let anfa = 2000;
%let ende = 2010;

data holidays;
  
format Aschermittwoch Osterfreitag Ostersonntag Ostermontag
         Maifeiertag Himmelfahrt
         Pfingstsonntag Pfingstmontag Fronleichnam
         Heiligabend
date9.;
  
do year=&anfa. to &ende.;
   
if year > 1699 and year < 2200 then do;
     
select;
       
when ( 1699 < year < 1800) N=3;
       
when ( 1799 < year < 1900) N=4;
       
when ( 1899 < year < 2100) N=5;
       
when ( 2099 < year < 2200) N=6;
       
otherwise;
     
end;
     
if N < 5 then M=23;
     
else M=24;
     a = mod( year                ,
19);
     b = mod( year                ,
4);
     c = mod( year                ,
7);
     d = mod((
19*a + M)           ,30);
     e = mod((
2*b + 4*c + 6*d + N), 7);
     
if (22 + d + e) < 32 then do;
       day =
22 + d + e;
       mon =
3;
     
end;
     
else do;
       day   =d + e -
9;
       mon   =
4;
       
if day=26 then day=19;
       
if day=25 and d=28 and a > 10 then day=18;
     
end;
     Ostersonntag  =input(put(year,
4.)!!'/'
                     
!!put(mon,z2.)!!'/'!!put(day,z2.),YYMMDD10.);
     Osterfreitag  =Ostersonntag -  
2;
     Ostermontag   =Ostersonntag +  
1;
     Aschermittwoch=Ostersonntag -
46;
     Himmelfahrt   =Ostersonntag +
39;
     Pfingstsonntag=Ostersonntag +
49;
     Pfingstmontag =Ostersonntag +
50;
     Fronleichnam  =Ostersonntag +
60;
     Heiligabend   =input(put(year,
4.)!!'/12/24',YYMMDD10.);
     Maifeiertag   =input(put(year,
4.)!!'/05/01',YYMMDD10.);
     
output;
   
end;
   
drop M N a b c d e day mon;
  
end;
run;

Viele Grüße
Ralph Gottschald

Nochmal Butcher...

Im (übrigens sehr empfehlenswerten) Java-Buch von Christian Ullenboom findet man eine Implementierung des Algorithmus von Butcher. Der Code ist ziemlich simpel gehalten und sollte sich mit wenig Aufwand nach SAS portieren lassen (Falls der "%"-Operator in Java irritiert: damit ist die Modulo-Operation gemeint).

Schöne Grüße
- MH -

Osteralgorithmus

Hier findet man verschiedene Algorithmen für die Berechnung des Datums von Ostern. Macht sich jemand die Mühe, daraus ein SAS-Programm zu schreiben? In SAS gibt es zwar PROC CALENDAR, das aber meines Wissens nur für den Ausdruck von Kalendern da ist und die Feiertage als Eingabedatei benötigt.

Regeln für bewegliche Feiertage

Hallo Forum,
ist ja super, dass es in SAS ein Oster-Sonntags-Programm gibt!
Vor Jahren hatte ich mal versucht so etwas in C zu schreiben, aber die Algorithmus war von einem Studienkollegen und falsch ....
Aber bei dieser Gelegenheit hatte ich mir damals Gedanken um die Lage der Feiertage im Jahr (relativ zu Ostern) gemacht. Bzw. meinen Kollegen gefragt, der sich damit gut auskannte (er kam aus einer gut katholischen Ecke des Westerwaldes, da weiß man sowas).
Hier also diese Info:

    fastna_cnt := ostern_cnt - 47;
    karfre_cnt := ostern_cnt -  2;
    ostemo_cnt := ostern_cnt +  1;
    himmel_cnt := ostern_cnt + 39;
    pfings_cnt := ostern_cnt + 49;
    pfinmo_cnt := ostern_cnt + 50;
    fronle_cnt := ostern_cnt + 60;
    Buss+Bettag:= Do vor Totensonntag;
    (also gilt: busbet_cnt := adven4_cnt - 3*7 - 1*7 - 4;)
    Totensonntag : So vor 1. Advent
    (deshalb das: - 1*7 oben bei busbet_cnt := )
    1. Advent ist 3 Wochen vor dem 4. Advent
    (deshalb das: - 3*7 oben bei busbet_cnt := )
    4. Advent ist der Sonntag vor dem 1. Weihnachtsfeiertag 
    (es gilt "in C Syntax":
     adven4_cnt = (weihn1_wotag==0) ? (weihn1_cnt-7) : (weihn1_cnt-weihn1_wotag);
     /*             if ...          ? then-Zweig     : else-Zweig        */
    )

Legende:
ostern_cnt laufender Tag im Jahr vom Oster-Sonntag
fastna_cnt laufender Tag im Jahr vom Fastnacht-Dienstag
.......... ...
fronle_cnt laufender Tag im Jahr von Fronleichnam
weihn1_cnt laufender Tag im Jahr vom 1.Weihnachtstag

Mit Hilfe von intnx (SAS-Base-Funktion) kann man den jeweiligen laufenden Tag wieder in ein Datum umrechen.

Das sind die Regeln für alle beweglichen Feiertage, damit kann man das jeweilige Dateum ausrechnen, wenn man den Ostersonntag kennt (Ostersonntag siehe oben im Beitrag von awindisch, 21 Nov. 2006, 11:35).
Gruß
Hans Kneilmann, Schäfer Shop GmbH (SSI)

Osteralgorithmus mit SAS 9

Hallo,

in SAS 9 gibt es eine Funktion, die Ostern berechnen kann:

1    data _null_;
2         OSTERN = holiday ('EASTER', 2006);
3         put OSTERN date9.;
4         HALLOWEEN = holiday ('HALLOWEEN', 2006);
5         put HALLOWEEN date9.;
6    run;

16APR2006
31OCT2006

Schönen Gruß

Benno

Haben Sie SAS 9.2?

In dem bereits erwähnten Beispielprogramm habe ich folgenden Hinweis gefunden:
Beginning in SAS 9.2, the HOLIDAY function will be available in Base SAS. Only certain common U.S. and Canadian holidays are defined for use with this function. Please refer to the SAS Language Reference, Dictionary for more details.
Welche SAS-Version verwenden Sie? Bei mir (SAS 9.1.3 unter Windows XP, Servicepack 4) ist die Funktion holiday leider unbekannt. Bei wem funktioniert das?

Osteralgorithmus mit SAS 9

Hallo Herr Mangold,

ich habe hier bei SAS EMEA
- SAS 9.1.3 Service Pack 4 WIN_PRO platform
- SAS 9.1.3 Service Pack 4 for Linux
beide sind Ship Event 23, so ungefähr von Mai oder Juni 2006
und auf beiden geht die Holiday-Function.

Was ich an Doku gefunden habe...
HOLIDAY( holiday, year )
returns a SAS date value for the holiday and year specified. Valid values for holiday are 'EASTER', 'THANKSGIVING', 'BOXING', 'CANADA', 'CHRISTMAS', 'COLUMBUS', 'FATHERS', 'HALLOWEEN', 'USINDEPENDENCE', 'LABOR', 'MEMORIAL', 'MOTHERS', 'NEWYEAR', 'THANKSGIVINGCANADA', 'VALENTINES', 'VETERANS', 'VETERANSUSG', 'VETERANSUSPS', 'VICTORIA', and 'CANADAOBSERVED'. For example, Easter2000 = HOLIDAY( 'EASTER', 2000);

Es ist sehr amerikanisch. Ob man Halloween wirklich mit einer Funktion bestimmen muss, weiss ich nicht so genau. Die Bestimmung von Ramadan wäre aber sicher sehr nützlich. Konsequenterweise würde man sich natürlich eine Bestimmung der Mondphasen wünschen.

Schönen Gruß

Benno Burkhart

Doku

Dafür gibt es keine öffentlich zugängliche Dokumentation, oder? Die Suche auf support.sas.com hat in dieser Richtung jedenfalls nur den oben angegebenen Treffer ergeben und in der im Web verfügbaren Onlinedokumentation ist auch nichts zu finden.

Osteralgorithmus mit SAS 9

doch, ich habe auf http://support.sas.com/onlinedoc/913/docMainpage.jsp
nach 'easter' gesucht.

High Performance Forecasting

Jetzt verstehe ich das. Es handelt sich um eine Funktion im Rahmen des High Performance Forecasting Servers. Nur dort ist die Funktion dokumentiert. Den muss man natürlich erstmal lizenziert haben.