logo

Dates : Repositionner les observations d’une table

Comment positionner des lignes concernant le même identifiant les unes à la suite des autres ? Par ex:

identifiant nom prenom date naissance
111 durand paul 01/10/1987
111 durand guy 26/01/1999
111 durand pierre 13/09/2001
333 dupont jack 16/12/2004

Le problème est de positionner la famille durand , identifiant 111, sur la même ligne.
Je vous remercie.

 

Bonjour, et merci de votre question.

Ce genre de « pivotage » de données n’est pas simple, et SAS ne fait pas grand-chose pour nous y aider. Il faut utiliser la procédure TRANSPOSE, sur chacune des variables à pivoter (ici, PRENOM et DATE DE NAISSANCE. On obtient plusieurs tables que l’on combinera dans une étape Data, avec plusieurs instructions SET.
Le programme suivant résume les manipulations à effectuer…

 

DATA work.test ;
    INPUT id nom $ prenom $ dtnais DDMMYY10. groupe_sanguin $ ;
    CARDS ;
 111 durand paul 01/10/1987 AB
 111 durand guy 26/01/1999 A
 111 durand pierre 13/09/2001 A
 111 durand karl 14/10/2002 O
 111 durand marie 14/10/2002 A
 111 durand ulysse 25/01/2004 B
 111 durand éléonore 25/01/2004 A
 111 durand garance 25/01/2004 B
 111 durand télémaque 25/01/2004 AB
 111 durand vanessa 07/09/2005 A
 111 durand armelle 07/09/2005 O
 333 dupont jack 16/12/2004 AB
 ;
 RUN ;
 PROC SORT DATA = work.test ;
    BY id nom ;
 RUN ;
 PROC TRANSPOSE DATA = work.test
                            OUT = work.res1 (DROP = _NAME_) 
                            PREFIX = prenom ;
    BY id nom ;
    VAR prenom ;
 RUN ;
 PROC TRANSPOSE DATA = work.test
                            OUT = work.res2 (DROP = _NAME_) 
                            PREFIX = dtnais ;
    BY id nom ;
    VAR dtnais ;
    FORMAT dtnais DDMMYY10. ;
 RUN ;
 PROC TRANSPOSE DATA = work.test
                            OUT = work.res3 (DROP = _NAME_) 
                            PREFIX = gpe_sanguin ;
    BY id nom ;
    VAR groupe_sanguin ;
 RUN ;
 DATA work.fus ;
    SET work.res1 ;
    SET work.res2 ;
    SET work.res3 ;
    BY id nom ;
 RUN ;

Je tiens à remercier Bernard Gestin de m’avoir soufflé cette solution plus simple que celle que j’avais proposée initialement.