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 :
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;