Publié le :
Utilitaire CREATION_INTERNE

Calcul de l'âge via fonctions FCMP personnalisées

Ce code est également disponible en : Deutsch English Español
En attente de validation
Le script commence par créer un jeu de données d'exemple 'test' contenant des dates de naissance et des dates de référence via des `datalines`. Il procède ensuite à la définition de deux fonctions FCMP : `AgeToday`, qui calcule l'âge par rapport à la date du jour, et `AgeDate`, qui calcule l'âge entre une date de naissance et une date de référence spécifiée. Enfin, le script utilise ces fonctions dans un nouveau DATA step pour ajouter les âges calculés au jeu de données 'test'. L'implémentation du calcul de l'âge est robuste, gérant les différences de mois et de jours pour une précision correcte.
Analyse des données

Type : CREATION_INTERNE


Le script crée un jeu de données d'exemple 'test' en utilisant des `datalines` pour simuler des dates de naissance et des dates de référence. Aucune donnée externe n'est requise ou utilisée.

1 Bloc de code
DATA STEP Data
Explication :
Ce bloc DATA step crée un jeu de données nommé 'test'. Il définit deux variables, 'birthday' et 'date2', comme des dates. Les formats `date9.` et `informat` sont utilisés pour la lecture et l'affichage des dates. Les valeurs sont ensuite lues directement à partir des `datalines` fournies, simulant ainsi un ensemble de données d'entrée pour les calculs d'âge. Ces données sont internes au script.
Copié !
1DATA test;
2 INPUT birthday date2;
3 informat birthday date2 date9.;
4 FORMAT birthday date2 date9.;
5 DATALINES;
6 16APR1986 16APR2017
7 15APR1986 16APR2017
8 17APR1986 16APR2017
9 29FEB2016 28FEB2017
10 29FEB2016 27FEB2017
11 29FEB2016 01MAR2017
12 ;
13RUN;
2 Bloc de code
PROC FCMP
Explication :
Cette PROC FCMP (Function Compiler) définit une fonction personnalisée nommée `AgeToday`. Cette fonction prend une date de naissance (`DateDay`) en argument. Elle calcule l'âge en années en comparant la date de naissance avec la date système actuelle (`TODAY()`) en utilisant la fonction `intck` pour compter les mois. Un ajustement est effectué pour le jour du mois (`day(bd)>day(to)`) afin de garantir une précision correcte de l'âge, gérant les cas où le mois de l'anniversaire est passé mais pas encore le jour.
Copié !
1PROC FCMP outlib=work.cat_function.test ;
2 function AgeToday(DateDay);
3 to = TODAY();
4 bd = DateDay;
5 age = int((intck('month',bd,to)-(day(bd)>day(to)))/12);
6 return(age);
7 endsub;
8RUN;
3 Bloc de code
PROC FCMP
Explication :
Cette PROC FCMP définit une seconde fonction personnalisée nommée `AgeDate`. Contrairement à `AgeToday`, cette fonction est plus générique et prend deux arguments : une date de naissance (`Birthdate`) et une date de référence (`Date`). Elle calcule l'âge en années entre ces deux dates en utilisant une logique identique à `AgeToday`, permettant ainsi de calculer l'âge à n'importe quelle date spécifiée et non seulement la date du jour.
Copié !
1PROC FCMP outlib=work.cat_function.test ;
2 function AgeDate(Birthdate,Date);
3 to = Date;
4 bd = Birthdate;
5 age = int((intck('month',bd,to)-(day(bd)>day(to)))/12);
6 return(age);
7 endsub;
8RUN;
4 Bloc de code
OPTIONS
Explication :
Cette instruction 'options' est essentielle pour rendre les fonctions FCMP définies dans le catalogue `work.cat_function.test` disponibles pour une utilisation dans les étapes SAS suivantes, telles que les DATA steps.
Copié !
1options cmplib=work.cat_function;
5 Bloc de code
DATA STEP
Explication :
Ce DATA step lit le jeu de données 'test' précédemment créé (`set test;`). Il appelle les fonctions FCMP `AgeToday` et `AgeDate` pour calculer respectivement l'âge par rapport à aujourd'hui (`AgeT`) et l'âge par rapport à la date spécifiée dans 'date2' (`AgeD`) pour chaque observation. Les résultats sont stockés dans de nouvelles variables 'AgeT' et 'AgeD', qui sont ajoutées au jeu de données 'test'.
Copié !
1DATA test;
2 SET test;
3 AgeT = AgeToday(birthday);
4 AgeD = AgeDate(birthday,date2);
5RUN;
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 : 16/04/2017 (fr) Last update : 16/04/2017 (fr) Author(s) : Nicolas DUPONT Tested on SAS Studio 9.4