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 03/10/2011, 12h10   #1
Candidat au titre de Membre du Club
 
Inscription : juillet 2008
Messages : 29
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 29
Points : 10
Points : 10
Par défaut Ajouter Colonne dynamique

Bonjour, j'aurais voulu savoir comment créer une ou plusieurs colonnes dynamiques dans une table SAS.
Je m'explique : au départ du code suivant :
Code :
1
2
3
4
5
6
7
8
9
DATA Tmp;
     INPUT NOM$ TYPE$ NUMERO$;
     CARDS;
DUPONT 10 1234567
DUPONT 20 7654321
DUBOIS 10 0123456
DUBOIS 30 6543210
;
RUN;
Comment faire pour que les 3 colonnes suivantes soient ajoutées automatiquement :
_10_NUMERO
_20_NUMERO
_30_NUMERO

Je pensais faire quelque chose du style :
Code :
1
2
3
4
DATA Tmp;
     SET Tmp;
     '_'||TYPE||'_NUMERO' = NUMERO;
RUN ;
Mais cela ne marche pas ...
Quelqu'un à une idée ?
Merci d'avance.
benbrisefer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2011, 12h39   #2
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 828
Points : 2 828
Bonjour.
L'idée est bonne mais il faut procéder en 2 temps : 1) préparer les noms de tes futures colonnes avec la formule que tu mets à gauche du = et 2) faire une proc TRANSPOSE.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
DATA Tmp;
     INPUT NOM$ TYPE$ NUMERO$;
     CARDS;
DUPONT 10 1234567
DUPONT 20 7654321
DUBOIS 10 0123456
DUBOIS 30 6543210
;
RUN;
DATA tmp2 ;
  SET tmp ;
  nomVar = COMPRESS("_"!!type!!"_NUMERO") ;
RUN ;
PROC TRANSPOSE DATA=tmp2 OUT=tmp2 (DROP=_name_) ;
  VAR numero ;
  ID nomVar ;
  BY nom NOTSORTED ;
RUN ;
Bon courage.
Olivier
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 03/10/2011, 13h39   #3
Membre éclairé
 
Homme
statisticien
Inscription : mai 2011
Messages : 212
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : statisticien
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : mai 2011
Messages : 212
Points : 319
Points : 319
Bonjour,

tu peux également penser aux ARRAYs qui semblent tout indiqués dans ton cas.

bonne journée.
jerome_pdv2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2011, 14h39   #4
Candidat au titre de Membre du Club
 
Inscription : juillet 2008
Messages : 29
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 29
Points : 10
Points : 10
Par défaut Ajouter Colonne dynamique

Très pratique ce PROC TRANSPOSE !!
Est-il possible de trier les colonnes ajoutées (par intitulé) ?
Merci.
benbrisefer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2011, 14h50   #5
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 828
Points : 2 828
Non, pas de tri possible à ma connaissance.

Pour ton autre question (en MP mais je préfère poster la réponse) : si tu as plusieurs colonnes à transposer, soit tu fais plusieurs proc TRANSPOSE puis un MERGE, soit tu dupliques les observations dans la table en entrée :
Code :
1
2
3
4
5
6
nom=formule1 ;
valeur=variable1 ;
OUTPUT ;
nom=formule2 ;
valeur=variable2 ;
OUTPUT ;
dans ton étape DATA, puis PROC TRANSPOSE avec ID nom et VAR valeur.

Bon courage.
Olivier
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/10/2011, 15h01   #6
Candidat au titre de Membre du Club
 
Inscription : juillet 2008
Messages : 29
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 29
Points : 10
Points : 10
Un tout grand merci pour toutes ces explications très intéressantes.
benbrisefer 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