Publié le :
Traitement de Données CREATION_INTERNE

Alignement d'Intervalles et Fonctions de Date

Ce code est également disponible en : Deutsch English Español
En attente de validation
Ce script SAS© explore en détail les fonctions `INTNX` et `INTCK`, essentielles pour la manipulation et le calcul des dates et des intervalles. Il présente comment `INTNX` permet d'avancer une date d'un certain intervalle en utilisant diverses options d'alignement (début, milieu, fin, même jour du mois/année). Le script aborde également la manière dont `INTNX` gère les avancements de date qui pourraient aboutir à des dates 'illégales' (ex: le 29 février dans une année non bissextile). La fonction `INTCK` est illustrée pour compter le nombre d'intervalles (ici, des semaines) entre deux dates, en montrant les différences entre les méthodes de comptage 'continue' et 'discrète'.
Analyse des données

Type : CREATION_INTERNE


Toutes les données utilisées dans ce script sont générées de manière interne via des étapes DATA. Le script crée des jeux de données (`ExamSchedule`, `check`) ou utilise des `DATA _NULL_` pour des démonstrations directes, en s'appuyant sur des dates littérales et des boucles pour simuler des séries temporelles ou des scénarios spécifiques.

1 Bloc de code
DATA STEP Data
Explication :
Ce bloc DATA STEP crée un jeu de données nommé `ExamSchedule`. Il génère une série de dates (`visdt`) du 1er au 10 juin 2007. Pour chaque date, la fonction `INTNX` est utilisée pour calculer le mois suivant avec différentes options d'alignement : par défaut (début du mois), 'beginning' (début du mois), 'middle' (milieu du mois), 'end' (fin du mois) et 'same' (même jour du mois). Les dates résultantes sont stockées dans de nouvelles variables (`next_d`, `next_b`, `next_m`, `next_e`, `next_s`) et formatées pour une meilleure lisibilité.
Copié !
1title1 '3.4.3 Alignment Options';
2 
3DATA ExamSchedule;
4 DO visdt = '01jun2007'd to '10jun2007'd;
5 next_d = intnx('month',visdt,1);
6 next_b = intnx('month',visdt,1,'beginning');
7 next_m = intnx('month',visdt,1,'middle');
8 next_e = intnx('month',visdt,1,'end');
9 next_s = intnx('month',visdt,1,'same');
10 OUTPUT;
11 END;
12 FORMAT visdt next: date7.;
13 RUN;
2 Bloc de code
PROC PRINT
Explication :
Cette procédure `PROC PRINT` affiche le contenu du jeu de données `ExamSchedule` créé précédemment. Cela permet de visualiser et de comparer les résultats des différentes options d'alignement de la fonction `INTNX` appliquées aux dates.
Copié !
1PROC PRINT DATA=examschedule;
2 RUN;
3 Bloc de code
DATA STEP
Explication :
Ce bloc `DATA _NULL_` est utilisé pour une démonstration directe sans créer de jeu de données permanent. Il illustre l'effet de l'option 'middle' ('m') de la fonction `INTNX` sur différentes dates. Il montre comment `INTNX` calcule le milieu du mois suivant, en tenant compte des années bissextiles ou du nombre variable de jours par mois, et affiche les résultats dans le log SAS.
Copié !
1DATA _null_;
2 mfeb= intnx('month','01jan2009'd, 1, 'm');
3 leap= intnx('month','01jan2008'd, 1, 'm');
4 mapr= intnx('month','01jan2008'd, 3, 'm');
5 mmay= intnx('month','01jan2008'd, 4, 'm');
6 put mfeb= leap= mapr= mmay=;
7 FORMAT mfeb leap mapr mmay date9.;
8 RUN;
4 Bloc de code
DATA STEP
Explication :
Ce second bloc `DATA _NULL_` démontre un cas particulier de `INTNX` : l'avancement vers des dates 'illégales'. Il calcule l'année suivante à partir du 29 février 2008 (année bissextile) et le mois suivant à partir du 31 mai 2008 (mois de 31 jours), en utilisant l'option 'same' ('s'). Les résultats, qui montrent comment SAS gère ces avancements (par exemple, le 28 février pour l'année suivante si non bissextile), sont affichés dans le log.
Copié !
1DATA _null_;
2 leap = intnx('year', '29feb2008'd, 1, 's');
3 short= intnx('month','31may2008'd, 1, 's');
4 put leap= short=;
5 FORMAT leap short date9.;
6 RUN;
5 Bloc de code
DATA STEP Data
Explication :
Ce bloc DATA STEP crée un jeu de données nommé `check`. Il initialise une date de début fixe (`start`) au 14 septembre 2011. Ensuite, il boucle à travers les dates, de la date de début jusqu'à la 'même date' du mois suivant, calculée avec `INTNX`. À chaque itération, la fonction `INTCK` est utilisée pour compter le nombre de 'weeks' (semaines) entre la date de début et la date de fin courante, en utilisant les options par défaut, 'continuous' ('c') et 'discrete' ('d'). Le jeu de données `check` enregistre ces calculs.
Copié !
1* Alignment for INTCK;
2DATA check;
3 start = '14sep2011'd; * the 14th was a Wednesday;
4 DO END = start to intnx('month',start,1,'s');
5 weeks = intck('weeks',start,END);
6 weeksc= intck('weeks',start,END,'c');
7 weeksd= intck('weeks',start,END,'d');
8 OUTPUT check;
9 END;
10FORMAT start END date9.;
11RUN;
6 Bloc de code
PROC PRINT
Explication :
Cette procédure `PROC PRINT` finale affiche le contenu du jeu de données `check`. Elle permet d'examiner comment les différentes options de comptage ('par défaut', 'continuous', 'discrete') de la fonction `INTCK` affectent le calcul du nombre de semaines entre deux dates données.
Copié !
1PROC PRINT DATA=check;
2RUN;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.