PRINTEMPS 2007
TECHNOS-CONSEILS
Profil d'utilisateur : Greg McLean - Lauréat du prix Valeur pour les clients !
À lire
Profil de la Formation : Peter Gounas
À lire
Profil de groupe d'utilisateur : Golden Horseshoe, groupe d'utilisateurs SASMD
À lire
Comment réduire de multiples enregistrements en un seul.
À lire
Vous pouvez aisément vous informer à propos des nouveautés de SAS 9.1, des nouveaux produits aux mises à jour et améliorations.

Cliquez sur le lien SASMD9 à partir de notre site Web support.sas.com.
Pour des détails sur tous les produits et solutions de SAS, cliquez ici
Le blogue SAScom : http://blogs.sas.com/sascom/
SAS Canada

Comment réduire de multiples enregistrements en un seul
Par Bryan K. Beverly,
BAE Systems Information Technology


PROBLÈME : Au cours du traitement de données, il est souvent nécessaire de concilier des enregistrements provenant de plusieurs points temporels en un seul enregistrement comportant les données provenant de tous les points temporels.

SOLUTION : Une façon de réduire de multiples enregistrements en un seul est illustrée ci-dessous. À l'aide d'un fichier d'entrée qui comporte de multiples enregistrements par ID (table BEFORE_DB), le code :

1) trie le fichier par ID
2) sépare le fichier trié en fichiers maîtres et de transactions
3) utilise l'instruction UPDATE pour fusionner les enregistrements de transactions dans des enregistrements maîtres

ATTENTION : Cette approche peut nécessiter quelques petites modifications en fonction du nombre de clés de tri ou de toute exigence particulière pour le traitement des valeurs manquantes.
/* INPUT DATA SET
*/data BEFORE_DB;
id=1;
var1=1;
var2=.;
var3=.;
output;
id=1;
var1=.;
var2=1;
var3=.;
output;
id=1;
var1=.;
var2=.;
var3=1;
output;
id=2;
var1=2;
var2=.;
var3=2;
output;
id=2;
var1=.;
var2=2;
var3=.;
output;
id=2;
var1=.;
var2=.;
var3=.;
output;run;
/* STEP 1 - Sort the file by ID */
proc sort data=BEFORE_DB out=SORTED_DB;
by id;
run;
/* STEP 2 - Put all of the first occurrences */
/* into a master data set and all of the others */
/* into a transaction data set */
data MASTER TRANS;
set SORTED_DB;
by id;
if first.id  then output MASTER;
else output TRANS;
run;
/* STEP 3 - Use the UPDATE statement to put all */
/* data on the same records. */
/* The MODIFY statement is also an option based */
/* upon how much control you need for missing */
/* variables - or for overwriting fields where */
/* new values are updating old values *
data AFTER_DB;
update MASTER TRANS;
by id;
run;

proc print data=BEFORE_DB;
title 'Before Collapse';
run;

proc print data=AFTER_DB;
title 'After Collapse';
run;

 

SAS et tous les autres noms de produits ou services de SAS Institute Inc. sont des marques de commerce déposées de SAS Institute Inc. aux États-Unis et dans les autres pays. MD indique une homologation aux É.-U. Les autres noms de marque ou de produit sont des marques de commerce déposées ou des marques de commerce de leurs entreprises respectives. Tous droits réservés.