Publié le :
Macro CREATION_INTERNE

Gestion des conversions de dates numériques avec FCMP

Ce code est également disponible en : Deutsch English Español
En attente de validation
Le script comprend deux fonctions FCMP : `DateToNum` convertit une date SAS© en un entier représentant l'année, le mois et le jour (AAAAMMJJ). `NumToDate` effectue l'opération inverse, prenant un entier AAAAMMJJ et le transformant en une date SAS© valide. Un exemple concret est fourni pour illustrer leur utilisation sur un jeu de données factice.
Analyse des données

Type : CREATION_INTERNE


Les données utilisées pour les exemples sont créées directement dans le script via une étape DATA avec des `datalines`. Le jeu de données 'test' contient des dates SAS et leurs équivalents numériques pour démontrer les fonctions de conversion.

1 Bloc de code
DATA STEP Data
Explication :
Cette étape DATA crée le jeu de données 'test' avec deux variables: 'date' (format date SAS) et 'date2' (format numérique). Les valeurs sont définies via `datalines` pour servir d'exemples de conversion.
Copié !
1DATA test;
2 INPUT date date2;
3 informat date date9.;
4 FORMAT date date9.;
5 DATALINES;
6 31DEC2016 20161231
7 01JAN2017 20170101
8 ;
9RUN;
2 Bloc de code
PROC FCMP
Explication :
Ce bloc `PROC FCMP` compile la fonction `DateToNum`. Elle prend une date SAS (`DateDay`), extrait l'année, le mois et le jour, puis les combine en un entier unique au format AAAAMMJJ (par exemple, 20161231 pour le 31 décembre 2016).
Copié !
1PROC FCMP outlib=work.cat_function.test;
2 function DateToNum(DateDay);
3 da = day(DateDay);
4 mo = month(DateDay);
5 ye = year(DateDay);
6 res = (ye * 10000) + (mo * 100) + da;
7 return(res);
8 endsub;
9RUN;
3 Bloc de code
PROC FCMP
Explication :
Ce bloc `PROC FCMP` compile la fonction `NumToDate`. Elle prend un entier au format AAAAMMJJ (`DateNum`), en déduit l'année, le mois et le jour, puis utilise la fonction `mdy` pour le convertir en une date SAS standard.
Copié !
1PROC FCMP outlib=work.cat_function.test;
2 function NumToDate(DateNum);
3 ye = int(DateNum/10000);
4 mo = int(DateNum/100)-(ye*100);
5 da = DateNum - (int(DateNum/100) * 100);
6 res = mdy(mo,da,ye);
7 return(res);
8 endsub;
9RUN;
4 Bloc de code
DATA STEP
Explication :
Cette étape DATA utilise les fonctions `DateToNum` et `NumToDate` compilées précédemment. Elle crée une nouvelle variable 'Date2Num' en convertissant la variable 'date' (SAS date) en format numérique et une variable 'num2date' en convertissant la variable 'date2' (numérique) en format date SAS.
Copié !
1DATA test;
2 SET test;
3 FORMAT num2date date9.;
4 Date2Num = DateToNum(date);
5 num2date = NumToDate(date2);
6RUN;
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.
Informations de Copyright : Creation date : 14/04/2017 (fr) Last update : 14/04/2017 (fr) Author(s) : Nicolas DUPONT