Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > Débutez
Débutez Forum concentrant les premières questions que l'on se pose en tant que débutant
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/05/2011, 11h18   #1
Invité régulier
 
laurita binette
Inscription : avril 2010
Messages : 39
Détails du profil
Informations personnelles :
Nom : laurita binette

Informations forums :
Inscription : avril 2010
Messages : 39
Points : 8
Points : 8
Par défaut Les valeurs de chaque variable sur 1 seule ligne pour un individu

Bonjour,

Le titre n'est sans doute pas très explicite alors je vais vous montrer ce que j'ai et ce que je voudrais avoir.

J'ai une table du genre :

Ident var1 var2 var3
01 . 2 .
01 1 . .
01 . . 6
02 4 . .
02 . . 5
03

Et je voudrais avoir :

Ident var1 var2 var3
01 1 2 6
02 4 0 5


J'ai essayé plusieurs trucs mais ça ne fonctionne jamais, ça ne garde que la valeur d'une des variable ou d'autres erreurs...

Merci d'avance pour votre aide !
lozeba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2011, 11h43   #2
Membre du Club
 
Homme Fabien
Inscription : novembre 2008
Messages : 59
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Localisation : France

Informations forums :
Inscription : novembre 2008
Messages : 59
Points : 56
Points : 56
Salut,

Si c'est des variables numériques tu peux peut etre t'en sortir facilement avec :

Code :
1
2
3
4
5
proc means DATA = tatable sum nway noprint;
class ident;
var var: ;
output out = tatable2(DROP = _type_ _freq_) sum=;
run;
Suistrop.
suistrop est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 02/05/2011, 12h56   #3
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 467
Détails du profil
Informations personnelles :
Nom : Homme Olivier Decourt
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 1 467
Points : 2 823
Points : 2 823
Bonjour.
Visiblement tes variables sont numériques donc la solution de SuisTrop est la plus efficace.
Si tu as un jour des variables de type caractère, cependant, ça ne fonctionnera pas. Il faut donc passer par une étape DATA et 2 arrays (un pour les variables existantes, un pour une mémoire de la valeur à l'observation précédente) avec en bonus un RETAIN pour assurer la bonne mémorisation.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
DATA work.incomplet ;
	INPUT (Ident var1 var2 var3) ($) ;
DATALINES ;
01 . 2 .
01 1 . .
01 . . 6
02 4 . .
02 . . 5
;
RUN ;
DATA work.complet (DROP=i) ;
  SET work.incomplet ;
  BY ident ;
  ARRAY valeur $ var1-var3 ;
  ARRAY memoire {3} $ _TEMPORARY_ ;
  RETAIN memoire: ;
  DO i=1 TO 3 ;
	valeur(i)=COALESCEC(valeur(i),memoire(i)) ;
    memoire(i)=valeur(i) ;
  END ;
  IF LAST.ident THEN OUTPUT ;
RUN ;
Évidemment, on peut adapter ce code à des variables numériques en enlevant les $ dans les déclarations des arrays ; mais cela n'a d'intérêt que si on n'a pas QUE des variables numériques (auquel cas la proc Means est largement plus immédiate à comprendre).
Bon courage.
Olivier
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 03/05/2011, 12h03   #4
Invité régulier
 
laurita binette
Inscription : avril 2010
Messages : 39
Détails du profil
Informations personnelles :
Nom : laurita binette

Informations forums :
Inscription : avril 2010
Messages : 39
Points : 8
Points : 8
Bonjour,

J'y suis arrivée !
Olivier, j'ai acheté le livre que vous avez co-écrit avec Hélène Kontchou Kouomegni l'année dernière et il m'est très utile.

Merci à vous 2!

Au plaisir,
Laura.
lozeba est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h12.


 
 
 
 
Partenaires

Hébergement Web