|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Étudiant Inscription : juillet 2011 Messages : 12 ![]() |
Bonjour
Je suis une novice et suis confrontée à un problème qu'est ce lui de renommer des variables, je m'explique : je suis entrain d'écrire une macro qui fait des jointures entre des tables, cependant après chaque jointure je voudrais changer le nom des variables et ce à chaque fois que le jointure est effectuée. merci pour votre aide. |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() ![]() Brice BeareParis Inscription : janvier 2011 Messages : 956 ![]() |
Salut,
C'est trop vague tes explications, pourrais-tu être plus précis(e) que ça? |
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Étudiant Inscription : juillet 2011 Messages : 12 ![]() |
ok je vais expliquer plus.
j'ai une table principale qui contient une variable date qui selon elle je vais chercher 30 autres tables (c'est à dire 30 jours plus tot), mais à ce moment je dois renommer les variables de la table j-1 en leur mettant toutes -1 et pour celles de la table j-2 je dois mettre -2, car tous simplement ce sont des tables journalières avec le meme nom de variables. le -1, -2,-3...-30 me permettra de les differencier. j'Espere que je suis arrivée à meiux vous expliquer merci bcp |
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() ![]() Brice BeareParis Inscription : janvier 2011 Messages : 956 ![]() |
Tu arrives à renommer une variable en -1, -2 ?
Tu peux pas poster un échantillon des deux tables que tu veux fusionner et le code que tu as commencé? ça permettrait de comprendre plus facilement |
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() ![]() Brice BeareParis Inscription : janvier 2011 Messages : 956 ![]() |
Si tu as réussi à faire la jointure de la table principale avec j-2 sans utiliser une macro, c'est ce code qu'il faut poster ainsi qu'un échantillon des deux tables
|
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() Étudiant Inscription : juillet 2011 Messages : 12 ![]() |
je ne suis pas certaine de pouvoir poster un echantillon de mes tables....et je ne suis pas même pas arrivée à faire avec -1 ou -2....mais je peux mieux expliquer : au fait ma table principale contient la variable date et les tables que je vais chercher s'Appellent : table_journaliere_date, donc ma macro variable est la date et c'est elle qui me permet de connaitre les tables que je vais chercher pour les joindre. je suis entrain de travailler sur le code de cette macro je le posterais dès qu'il aura de l'allure.....je ne suis pas une prof..j'apprend et c'Est tellement dure
|
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() ![]() Brice BeareParis Inscription : janvier 2011 Messages : 956 ![]() |
Faut juste preciser le nom de ta table principale, la variable qui sert de jointure (je supose que c'est date), le nom de la deuxième table ainsi que la variable que tu veux récupèrer dans celle-ci et comment tu veux la renommer
|
|
|
00
|
|
|
#8 |
|
Invité de passage
![]() Étudiant Inscription : juillet 2011 Messages : 12 ![]() |
ma table principale s'appelle liste_finale_1, ma variable qui sert de jointure s'Appelle code et non la date. les tables à joindre sont appelés comme ca: table_journaliere_date, table_journaliere_date-1 .........et je recupere toutes varaibles et les renommes toutes avec n-1 elles sont au nombre de 60.
|
|
|
00
|
|
|
#9 |
|
Membre Expert
![]() ![]() Brice BeareParis Inscription : janvier 2011 Messages : 956 ![]() |
Une table SAS ne peux pas s'appeler table_journaliere_date-1 (le -1 ne passera pas).
Et tu renommes quoi en n-1? |
|
|
00
|
|
|
#10 |
|
Invité de passage
![]() Étudiant Inscription : juillet 2011 Messages : 12 ![]() |
bein non par exemple table_journalire_20110705 et table_journalire_20110704 et table_journalire_20110703....et ainsi de suite, c'est comme ca qu'elles sont crees
merci |
|
|
00
|
|
|
#11 | ||
|
Membre Expert
![]() ![]() Brice BeareParis Inscription : janvier 2011 Messages : 956 ![]() |
Dis-moi si ça répond à ce que tu veux (vu que tu ne donnes pas plus de précisions sur le nom des variables avant et après renommage)
Code :
|
||
|
|
00
|
|
|
#12 |
|
Invité de passage
![]() Étudiant Inscription : juillet 2011 Messages : 12 ![]() |
merci bcp pour ton aide, je vais m'inspirer de ce que tu m'as envoyé pour faire de quoi je t'enverrais alors ce que j'aurais trouvé
merci encore |
|
|
00
|
|
|
#13 | ||||
|
Expert Confirmé
![]() ![]() Olivier DecourtFormateur en informatique Inscription : avril 2008 Messages : 1 467 ![]() |
Bonjour.
Je ne suis pas sûr de bien visualiser le besoin, mais je ne suis pas certain qu'il soit nécessaire de faire des macros. Je verrais quelque chose comme : (1) on empile toutes les tables journalières pour en faire une grosse table tout en longueur, et (2) on fait un MERGE entre la table initiale (qui contient les dates) et la table de l'étape 1, en fonction de la date. Ci-dessous mon jeu d'essai (bien long puisque je crée plus de 20 tables) Code :
Code :
Olivier |
||||
|
|
00
|
|
|
#14 |
|
Membre Expert
![]() ![]() Brice BeareParis Inscription : janvier 2011 Messages : 956 ![]() |
Je n'ai pas lu tout ton code Olivier mais si tu compiles tout les fichiers d'un seul coup, comment tu vas identifier une variable provenant du fichier Juillet05 et Juillet06?. J'ai cru comprendre qu'elle voulait toper chaque variable en fonction de sa provenance (fichier).
|
|
|
00
|
|
|
#15 |
|
Invité de passage
![]() Étudiant Inscription : juillet 2011 Messages : 12 ![]() |
Je pense que j'ai tres mal expliqué ce que je voulais, je vais mieux expliquer :
je dispose d'une table principale avec 20 variables dont une est la date. je dispose aussi d'une centaine de tables chacune correspondant à un jour de l'année. Mon but est de partir de ma date principale, lire la date et aller chercher toutes las tables correspondant à 30 jours plus tôt. les tables journelieres contiennent dans leur nom la date comme j'ai mentionné plus tot : table_journalire_20110705, table_journalire_20110704,table_journalire_20110703.......ainsi de suite .....toutes les dates sont possibles, je n'ai pas un champs définis car mon programme est supposé marché quelque soit ces dates. cependant bien sur, puisque les tables journalières contiennent les mêmes variables je devraient les renommer pour que ça ait du sens. Donc pour revenir, il va falloir créer une table finale qui contient pour chaque observation de la table initiale les variables pour date-1, date-2....jusqu'à date-30. Ah oui un truc important, les tables sont tres grosses merci beaucoup pour votre interet |
|
|
00
|
|
|
#16 |
|
Membre Expert
![]() ![]() Brice BeareParis Inscription : janvier 2011 Messages : 956 ![]() |
La solution que je t'ai proposée répond parfaitement à ton problème:
1) la table principale s'appelle pivot dans mon cas 2) Tu dois renseigner la macro %let liste=table_journalire_20110705 table_journalire_20110704 table_journalire_20110703 3) la boucle ira de 1 à 3 car on a 3 tables dans ce cas 4) dans la macro, jour =jour&i pour chaque table journalière puis je fusionne avec la table principale 5) Comme tu ne m'as pas donné le nom des variables initiales, je les ai appelé jour, donc pour table_journalire_20110705 ça sera jour5 |
|
|
00
|
|
|
#17 |
|
Expert Confirmé
![]() ![]() Olivier DecourtFormateur en informatique Inscription : avril 2008 Messages : 1 467 ![]() |
@Brice : dans le code, c'est grâce à la pseudo-variable demandée par l'option INDSNAME qu'on trace la table empilée, puis on en dérive la date.
@Loubna: je n'ai effectivement toujours rien compris au problème. Cela dit, une règle d'or quand on veut construire des macro-programmes c'est d'arriver d'abord à une solution sur un cas particulier, sans utiliser de macros du tout (en écrivant tout en code SAS classique) ; et ensuite on ajoute le macro-langage pour automatiser, quand la partie SAS fonctionne déjà. Peux-tu nous écrire le code de base, sur un exemple (le 04/07/011 mettons), et sur 2 tables quotidiennes au lieu de 30 pour qu'on comprenne bien ? Pour le moment, c'est difficile de t'aider en aveugle. |
|
|
00
|
|
|
#18 |
|
Invité de passage
![]() Étudiant Inscription : juillet 2011 Messages : 12 ![]() |
Merci ....je vais suivre ton conseil olivier...je vais devoir quitter le bureau mnt, des que je rentre je vais faire l'exercice que tu m'as demandé et je te reviens . Merci bcp
|
|
|
00
|
|
|
#19 | ||
|
Invité de passage
![]() Étudiant Inscription : juillet 2011 Messages : 12 ![]() |
bonjour
voila comme convenu le code qui va faire une premiere jointure : Code :
aussi, ici je n'ai pas effectuer le changement du nom des variable de la table journaliere merci |
||
|
|
00
|
|
|
#20 | ||||
|
Expert Confirmé
![]() ![]() Olivier DecourtFormateur en informatique Inscription : avril 2008 Messages : 1 467 ![]() |
Bonjour Loubna.
Ça me paraît une base de travail plus solide comme ça. Je te propose de découper le problème en 3 : (1) collecter les noms de variables à renommer et préparer un futur gros RENAME avec des couples ancien nom/nouveau nom, ces derniers étant les anciens noms avec des suffixes _1, ou _2 (pour N-2), etc. (2) fusionner une table de données journalières avec la table de base en se basant sur le code que tu envoies ; c'est l'occasion de faire ce fameux RENAME (3) réitérer l'étape (2) sur toutes les dates concernées. Pour cela, on peut faire 2 ou 3 macros. Je te propose d'en faire 2, la première regroupant les étapes (1) et (2). Code :
Code :
Bon courage. Olivier |
||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com