Suite au précieux conseil d’Arnaud Gaborit (A.I.D.), je vous propose de compléter l’article du 26 janvier dernier intitulé « Deux méthodes pour sélectionner en se basant sur une second data set« . Les personnes travaillant sur de grosses bases de données apprécieront.
Lectures complémentaires :
- L’article « 2 méthodes pour de nouveaux formats » intéresseront ceux qui dans un premier temps découvre la création de formats en se basant sur un data set.
- Pour l’usage de la fonction PUT, vous pouvez consulter « Convertir une variable caractère en numérique et inversement« .
- L’option NODUPKEY de PROC SORT est discuté dans l’article « Identifier et supprimer les doublons« .
1. Rappel : les données et le résultat attendu
D’un côté, on a un data set contenant la liste des effets secondaires observés. Il y a une ligne par effet secondaire. Seuls les patients ayant eu un effet secondaire sont enregistrés.
data ae_multi; input patref ae_id; datalines; 1 1 1 2 2 1 4 1 4 2 5 1 ; run;
De l’autre côté, on a la liste des patients correspondant à la population qui nous intéresse. Une ligne correspond à un patient.
data pat_uniq; input patref; datalines; 2 3 4 ; run;
Le but est de garder uniquement les effets secondaires des patients présents dans notre population.
patref ae_id 2 1 4 1 4 2
2. Créer un format à partir d’un data set
Dans une premier temps, un format numérique (TYPE=N est la valeur par défaut) appelé PATREF (FMTNAME=’PATREF’) est créé à partir du data set sur les patients. La variable PATREF sert de valeur START. Pour toutes les valeurs de START, on applique le même libellé (LABEL=’retenir’).
Si le data set contient plusieurs variables (ce qui sera généralement le case), l’option KEEP servira à limiter la sélection à la variable servant à définir START.
data pat (keep=start fmtname label); set pat_uniq (rename=(patref=start)); *(keep=patref); fmtname='PATREF'; label='retenir'; run;
Si plusieurs valeurs identiques pour la variable START sont présentes dans votre fichier, vous devrez supprimer les doublons. L’étape suivante ne marchera pas sinon.
*proc sort data=pat nodupkey;
*by start;
*run;
Le data set est à présent convertit en format au moyen de l’option CNTLIN. Ce format est sauvegardé par défaut dans le catalogue FORMATS de la bibliothèque WORK.
proc format cntlin=pat; run;
3. Sélectionner les observations de son choix
Ici, l’option WHERE est privilégiée à l’instruction IF pour des raisons de performance.
Ensuite, grâce à la fonction PUT, les valeurs de PATREF sont converties en RETENIR si elles sont présentes dans le data set PAT_UNIQ. Seules ces valeurs RETENIR sont gardées.
data ae_multi; set ae_multi (where=(put(patref,patref.) = 'retenir')); run;
Voir le résultat :
proc print data=ae_multi; run;