Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > SAS Base
SAS Base Forum d'entraide sur SAS base : étape data, procédures non statistiques, procédures non graphiques, SQL
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 16/03/2011, 17h19   #1
Invité régulier
 
Inscription : juillet 2008
Messages : 58
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 58
Points : 7
Points : 7
Par défaut Transposer des données

Bonjour,

J'ai une seule ligne dans ma table et six variables:

region a b c d e
bretagne 1 2 3 4 5

je voudrais obtenir la chose suivante :

bretagne
a 1
b 2
c 3
d 4
e 5

merci de votre aide !
ludo35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2011, 17h20   #2
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 143
Points : 1 760
Points : 1 760
ca doit pouvoir se faire avec la proc transpose la encore...
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2011, 17h35   #3
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
C'est pas plutôt 10 variable? si oui, éssaie ça

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
DATA M;
input v1$ v2 $ v3$ v4$ v5$ v6$ v7$ v8$ v9$ v10$;
cards;
a b c d e 1 2 3 4 5
;
run;
 
DATA M;
SET M;
array y(*) v1-v5;
array y2(*) v6-v10;
do i=1 TO dim(y);
c1=y(i);
c2=y2(i);
output;
end;
DROP v: i;
run;
Bonne soirée
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2011, 17h42   #4
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 143
Points : 1 760
Points : 1 760
6 variables il me semble... enfin si je comprends son pb
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
DATA M;
input v1$ v2 $ v3$ v4$ v5$ v6$ ;
cards; 
region a b c d e
bretagne 1 2 3 4 5
;
run;
 
proc transpose DATA=M out=MT(DROP=_NAME_);
var v1-v6;
run;

ludo, tu aurais pu t'en sortir tout seul...
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2011, 23h27   #5
Invité régulier
 
Inscription : juillet 2008
Messages : 58
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 58
Points : 7
Points : 7
merci beaucoup pour vos réponses.

Cependant, je pense que j'ai mal posé mon problème: j'ai plusieurs tables de ce type à traiter, donc je ne connais pas les valeurs indiquées 1 , 2 , 3 , 4 et 5 (enfin je n'ai pas envie de toutes les taper).

Puis-je quand même transposer les données comme je le souhaite ?
ludo35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 08h43   #6
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Bien sûr que ça va marcher, la proc transpose fait référence à des variables et non les données contenues dans celles-ci.
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 10h49   #7
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 143
Points : 1 760
Points : 1 760
deux choses:

1/ formatage des variables est (à ma connaissance) assez rigide via la proc transpose. La longueur de la variable va être déterminée par la première observation, donc si une observation suivante à un chaine de caractère plus longue elle va être coupée:

Code :
1
2
3
4
5
6
7
8
9
10
11
DATA M;
input v1$ v2 $ v3$ v4$ v5$ v6$ ;
cards; 	
region a b c d e
bretagne 1 cavacoupercherie 3 4 5
;
run;
 
proc transpose DATA=M out=MT(DROP=_NAME_);
var v1-v6;
run;
c'est pour cette raison que d'une manière générale je préfère transposer par jointure multiple (enfin tant que ca reste abordable....)

2/ si tu transpose beaucoup d'observations, cela te fera beaucoup de variables et je ne suis pas sur de jusqu'où sas peut aller. Il me semble que c'est 32000 avant la version 9.1. A partir de 9.1 on pourrait dépasser ce nombre mais le nombre max serait tributaire de ton environnement et l'attribut de ton fichier (par ex, le nombre de variables dépend de la longueur totale des variables)..
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/03/2011, 14h32   #8
Invité régulier
 
Inscription : juillet 2008
Messages : 58
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 58
Points : 7
Points : 7
Voici l'erreur que j'ai lorsque je lance ma proc transpose:
ERROR: Soit les racines ne correspondent pas soit le suffixe de départ est après le suffixe de fin.

quelle en est la raison? cela devrait marcher!
ludo35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 14h45   #9
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
Citation:
Envoyé par ludo35 Voir le message
Voici l'erreur que j'ai lorsque je lance ma proc transpose:
ERROR: Soit les racines ne correspondent pas soit le suffixe de départ est après le suffixe de fin.

quelle en est la raison? cela devrait marcher!
C'est une liste de variables où tu as indiqué le nom de la 1e, le nom de la dernière et un tiret entre les deux, comme v1-v6. Dans ton code précisément, ça ne suit visiblement pas les règles pour que SAS comprenne :
  • tous les noms doivent commencer à l'identique (V ici)
  • après cette racine commune, il n'y a qu'un numéro
  • le premier n° cité est inférieur au dernier
Si tu as écris v1-vb5 par exemple ça ne sera pas compris correctement.
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/03/2011, 14h58   #10
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 143
Points : 1 760
Points : 1 760
Dans ton var de ta proc transpose, indique toutes tes variables que tu veux transposer, en reproduisant fidèlement leur nom, et en séparant chaque variable par un espace.
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 15h01   #11
Invité régulier
 
Inscription : juillet 2008
Messages : 58
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 58
Points : 7
Points : 7
merci beaucoup pour cet éclaircissement.

En effet j'avais mis un tiret entre la premiere et la dernière variable.
En listant les variables, ça fonctionne .
ludo35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 15h18   #12
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Citation:
Envoyé par ludo35 Voir le message
merci beaucoup pour cet éclaircissement.

En effet j'avais mis un tiret entre la premiere et la dernière variable.
En listant les variables, ça fonctionne .
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 15h33   #13
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
Citation:
Envoyé par ludo35 Voir le message
En effet j'avais mis un tiret entre la premiere et la dernière variable.
Si tu ne veux citer que la 1e et la dernière variable (en étant bien sûr qu'elles ne changeront JAMAIS de place !!!) tu peux écrire premiere -- derniere. (Avec deux tirets.)
Et même premiere -NUMERIC- derniere ou premiere -CHARACTER- pour ne prendre qu'un certain type.

Mais bon, c'est du dépannage parce que dans un programme en production, utilisé de manière récurrente, on n'a presque jamais la garantie que les variables ne vont pas jouer aux chaises musicales.
olivier.decourt 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 19h14.


 
 
 
 
Partenaires

Hébergement Web