
Deux réponses possibles avec la fonction IFN
janvier 19, 2009Les fonctions IFN et IFC existent depuis la version 9.1 de SAS. Elles permettent de retourner une valeur si une condition est remplie et une autre si ce n’est pas le cas. Je vous propose d’illustrer la fonction IFN en combinaison avec la fonction LAG.
1. La différence entre les fonctions IFN et IFC
La fonction IFN retourne une valeur numérique alors que la fonction IFC retourne une valeur caractère.
2. Trois paramètres obligatoires pour ces fonctions et un optionnel
Dans un premier temps, il s’agit de définir une condition.
- Paramètre 1 : définir la condition
Dans un second temps, on assigne chacune des valeurs prises par la nouvelle variable selon que
- Paramètre 2 : valeur si la condition est remplit,
- Paramètre 3 : valeur si la condition n’est pas remplit
- Paramètre 4 : valeur si la condition donne une valeur manquante (optionnel).
3. L’exemple
Dans cet exemple, on a trois variables : PATIENT_ID et CNTRY_ID sont les variables clés. STRT_DT est la date de début d’un effet secondaire.
data adverse_events; input patient_id cntry_id $ strt_dt; informat strt_dt date9.; datalines; 999 DE 03MAR2004 999 DE 04MAR2004 999 DE 06MAR2004 111 AU 12DEC2003 111 AU 15DEC2003 ; run;
On souhaite créer une nouvelle variable contenant la date précédente par patient.
patient_id cntry_id strt_dt prev_dt 999 DE 03MAR2004 . 999 DE 04MAR2004 03MAR2004 999 DE 06MAR2004 04MAR2004 111 AU 12DEC2003 . 111 AU 15DEC2003 12DEC2004
La solution classique serait d’utiliser un FIRST qui implique que les données soient triées au préalable par patient.
proc sort data=adverse_events; by patient_id cntry_id; run; data adverse_events; set adverse_events; by patient_id cntry_id; prev_dt=lag(strt_dt); first.cntry_id then prev_dt=.; run;
Mais maintenant qu’on a la fonction IFN, la démarche est plus rapide. Dans notre exemple, seuls les trois paramètres obligatoires de la fonction IFN sont utilisés.
data adverse_events; set adverse_events; prev_dt=ifn(patient_id=lag(patient_id) and cntry_id=lag(cntry_id), lag(strt_dt), .); run;
4. Liens
La fonction LAG
Votre commentaire