Vous n'êtes pas identifié.
Vous êtes sur le forum du master ESA !
Le site du master ESA - description de la formation, notes de cours, contacts... vient de déménager !!!
Venez visiter notre nouveau site : www.master-esa.fr
Bonjour,
Voilà, j'ai des individus et leur voiture, avec une ligne pour chaque voiture, par exemple :
christophe velsatis
christophe smart
julie twingo
etienne cadillac
etienne 2cv
Je voudrais transformer tout cela pour ne plus avoir qu'une ligne par individu :
christophe velsatis smart
julie twingo
etienne cadillac 2cv
Pourriez vous m'aider ? Merci !!!
Hors ligne
kakame a écrit:
Bonjour,
Voilà, j'ai des individus et leur voiture, avec une ligne pour chaque voiture, par exemple :
christophe velsatis
christophe smart
julie twingo
etienne cadillac
etienne 2cv
Je voudrais transformer tout cela pour ne plus avoir qu'une ligne par individu :
christophe velsatis smart
julie twingo
etienne cadillac 2cv
Pourriez vous m'aider ? Merci !!!
Bonjour,
Comme çà vite fait je te dirais de faire une proc transpose by prénom et var nom de la voiture... à tester...
J'ai aps trop le temps d'approfondir la question désolé :S
Pensez à trier votre base par prénom
Dernière modification par 20syl (08-04-2010 09:42:30)
Hors ligne
au fait j'ai fais une jointure entre deux tables: clients et voiture...client peut avoir plusieurs voitures,d'où le fait qu'il apparaisse 2 fois(christophe par exemple)...:s
Hors ligne
Bonjour, si les données de votre exemple sont dans une table "toto" avec comme variables PRENOM et VOITURE, alors voici une solution possible avec retain et la commande first. :
data toto2(drop=voiture); set toto; by prenom; retain voiture1; if first.prenom then voiture1=voiture; else voiture2=voiture; if last.prenom; run;
Comme dit précédemment, bien penser à trier la table toto par prénom.
Une autre solution possible pour généraliser le processus (le code précédent ne marche que si chaque individu a au maximum 2 voitures), à partir du moment où on sait quel est le nombre maximum de véhicule pour une seule personne (10 véhicules par exemple) :
data toto2(drop=voiture i); set toto; by prenom; retain vehicule1-vehicule10 ; array vehicule(10) $15.; if first.prenom then do i=2 to dim(vehicule); vehicule1=voiture; vehicule(i)='.'; end; else do i=2 to dim(vehicule); if vehicule(i)='.' and vehicule(i-1) NE voiture and vehicule(i-1) NE '.' then vehicule(i)=voiture; end; if last.prenom; run;
Dernière modification par Benoit (08-04-2010 13:28:50)
Hors ligne
et :
proc transpose data=toto;
by prenom;
var nom_voiture;
run;
ca marche pas?
normalement tu devrais avoir ce que tu désires soit:
christophe velsatis smart
julie twingo
etienne cadillac 2cv
Hors ligne
je vous remercie:)
Hors ligne
En effet c'est bien plus simple avec transpose, j'aurais appris quelque chose moi aussi.
Du coup çà fait un peu bourrin mon programme....Au moins çà plaira aux fans d'array
Dernière modification par Benoit (08-04-2010 14:32:08)
Hors ligne