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 !
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 !
ca doit pouvoir se faire avec la proc transpose la encore...
C'est pas plutôt 10 variable? si oui, éssaie ça
Bonne soirée
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
6 variables il me semble... enfin si je comprends son pb
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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...
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 ?
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.
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:
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....)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
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)..
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.
Bon courage.
Olivier
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.
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 .
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.
Bon courage.
Olivier
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager