IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macro Discussion :

Récupérer nom d'une table dans une macro-variable


Sujet :

Macro

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur d'études / Biostatisticien
    Inscrit en
    Décembre 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études / Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 354
    Points : 194
    Points
    194
    Par défaut Récupérer nom d'une table dans une macro-variable
    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

  2. #2
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    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

  3. #3
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2011
    Messages : 1 625
    Points : 3 403
    Points
    3 403
    Par défaut
    Citation Envoyé par joyeux_lapin13 Voir le message
    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.


    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

  4. #4
    Membre habitué
    Homme Profil pro
    Ingénieur d'études / Biostatisticien
    Inscrit en
    Décembre 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études / Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 354
    Points : 194
    Points
    194
    Par défaut
    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?

  5. #5
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2011
    Messages : 1 625
    Points : 3 403
    Points
    3 403
    Par défaut
    Hello Julien;
    (toujours pas compis !!!)
    Ce programme renvoie le nom des tables et la date de création/modification dans l'ordre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    proc sql;
    create table tab as select memname as tab_name, crdate as dt_creat format datetime.  from dictionary.tables  where upcase(libname)='WORK'
    order by dt_creat;
    quit;
    Dans une étape ,avec un call symput et un une condition _n_=1 tu peux récuperer le nom de la première table créée dans la Work dans une macro variable.

    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

  6. #6
    Membre habitué
    Homme Profil pro
    Ingénieur d'études / Biostatisticien
    Inscrit en
    Décembre 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études / Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 354
    Points : 194
    Points
    194
    Par défaut
    Merci Olivier et Sam pour votre aide! j'ai de quoi faire grace à vous désormais!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. copier une table d'une BDD dans une table d'une autre BDD
    Par faniette dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/05/2013, 10h17
  2. Réponses: 7
    Dernier message: 25/03/2011, 10h52
  3. [AC-2003] insert des données d'une table dans une table d'une base externe
    Par marieo dans le forum VBA Access
    Réponses: 1
    Dernier message: 30/11/2009, 14h29
  4. Réponses: 2
    Dernier message: 24/02/2009, 17h40
  5. Récupérer le nom d'une colonne d'une table dans une variable
    Par mimi51340 dans le forum Général Java
    Réponses: 4
    Dernier message: 13/03/2008, 14h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo