|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre habitué
![]() Julien Ingénieur d'études / Biostatisticien Inscription : décembre 2009 Messages : 304 ![]() |
Salut, afin de ne pas me prendre de conflits entre ma table d'entrée et les différentes tables que je conçois dans mes macros, j'aimerais en entrée de programmes pouvoir comparer le nom de ma table d'entrée avec toutes celles à venir.
Comment qu'on fait? en fait je me doute que la réponse est sur le forum mais aprés plusieurs tentative j'ai pas trouvé mon bonheur |
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() ![]() Olivier DecourtFormateur en informatique Inscription : avril 2008 Messages : 1 467 ![]() |
Bonjour Julien.
Je ne connais pas de méthode automatique pour éviter les conflits que tu évoques. Sauf éventuellement faire planter SAS en cas d'écrasement d'une table existante : OPTION NOREPLACE ; mais ça ne fonctionne que sur les tables hors Work de toute façon. Sinon, il reste les %IF, soit en début de macro-programme (attention le IN ne marche pas follement bien en macro-langage, donc plutôt des égalités séparées par des OR) soit au fur et à mesure des étapes créant des tables. Quelques petites choses anodines à garder en tête : 1) penser que WORK peut être omis dans la valeur fournie en paramètre par l'utiliser. La condition pour le savoir est %INDEX(&tableEntree,.) > 0 --> il y a un nom de bibliothèque. 2) penser à mettre en majuscules tout ce qu'on compare avec %UPCASE 3) éventuellement, %SYSFUNC(EXIST(&tableEntree))=0 indique que la table n'existe pas déjà. Bon courage. Olivier |
|
|
10
|
|
|
#3 | |
![]() ![]() Samir SELMANEConsultant en Business Intelligence Inscription : février 2011 Messages : 1 012 ![]() |
Citation:
Hello ; Pas sûre d’avoir compris. Tu veux comparer les noms ? pour ? Sinon autre alternative à l’option d’Olivier , t’as aussi l’option de libname ACCESS=READONLY ; - Si t’écrases au fur à mesure tes tables ( mêmes nom) tu peux utiliser les option Genmax=n et pour reconstituer la table souhaitée c’est GENNUM=n pour la première table c’est GENNUM=1 |
|
|
|
10
|
|
|
#4 |
|
Membre habitué
![]() Julien Ingénieur d'études / Biostatisticien Inscription : décembre 2009 Messages : 304 ![]() |
Salut et merci Olivier et Sam pour vos réponses!
J'appel "conflit" quand, par exemple, je vais appeler ma table de données sur laquelle travailler: 'DATA' et qu'au cours de ma macro je créé une table de résultats 'DATA' écrasant la table de données qui comptait être utilisée dans la suite de mon programme. Ce que j'aimerais c'est: ajouter une clause (à la main en comparant directement) qui lance mon automate uniquement si la table de données en entrée ne porte pas le même nom qu'une des tables de résultats qui sera générée. L'idée finale je l'ai: comparer l'intitulé de ma table avec celui de toutes les tables que je vais récapitulé (à la main), par contre ce qui me manque c'est de pouvoir mettre dans une macro-variable directement le nom de ma table. Alors je réfléchissais sur la proc CONTENTS qui renvoit cette info, seulement j'ai parcouru le site de SAS et je n'arrive pas à trouver le bon output qui permet de récupérer la table en question (FILENAME)... si quelqu'un sait? |
|
|
00
|
|
|
#5 | ||
![]() ![]() Samir SELMANEConsultant en Business Intelligence Inscription : février 2011 Messages : 1 012 ![]() |
Hello Julien;
(toujours pas compis !!!) Ce programme renvoie le nom des tables et la date de création/modification dans l'ordre. Code :
Après pour récuperer les noms de toutes tes tables tu peux faire un select into: dans la proc sql. Puis faire ta comparaison |
||
|
|
10
|
|
|
#6 |
|
Membre habitué
![]() Julien Ingénieur d'études / Biostatisticien Inscription : décembre 2009 Messages : 304 ![]() |
Merci Olivier et Sam pour votre aide! j'ai de quoi faire grace à vous désormais!
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com