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 :

Lister les variables des tables d'une librairie avec PROC SQL


Sujet :

Macro

  1. #1
    Membre à l'essai
    Homme Profil pro
    Chargé Statistiques et reportings
    Inscrit en
    février 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Chargé Statistiques et reportings
    Secteur : Finance

    Informations forums :
    Inscription : février 2012
    Messages : 7
    Points : 10
    Points
    10
    Par défaut Lister les variables des tables d'une librairie avec PROC SQL
    Bonjour;
    j'ai besoin de lister toutes les variables de toutes les tables existantes dans la librairie SASHALP.
    mon idée est de :
    1- Créer une tables list_Table par dictionary.tables qui liste toute les tables de SASHELP.
    2- Créer une macro variable qui permet de lire le nombre de ligne dans la table list_Table.
    3- créer une table qui liste les variables de la table qui correspond au compteur i.
    4- Fussionner toutes les tables.

    j'ai écrit le script suivant:

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    /*Lister toute les tables du reprtoire*/
    proc sql;
    create table List_Table AS
       select * /*libname, memname, nvar, objname*/
       from dictionary.tables
       where upcase(libname)= 'SASHELP' and
             upcase(memtype)='DATA';
    quit;
     
    %macro Lister_var;
     
    /*Lire le nom des table et le nbre de ligne de la base List_ table*/
    DATA liste /*_null_*/; 
    SET List_Table;
    call symput('Table'||left(trim(_n_)),memname);
    call symput('nb_Table',_n_);
    run;
     
    /*Récupérer le non de la table entre deux quotes*/
    %Let Table_Quote =%sysfunc(tranwrd(%nrstr(%')&Table.%nrstr(%'),%str( ),%str(' '))) ;
     
    /*lancer le compteur*/
    %do i =1 %TO &nb_Table ;
     
    /*lister les variables de la table qui correspond au ciompteur i
    proc sql;
    create table &Table AS
    select *
    from dictionary.columns
    where upcase(libname)= 'SASHELP' and
          upcase(memname)in (&Table_Quote)
    ;
    quit;
     
    %end;*/
    %mend;
    %Lister_var;
    mais ce script ne marche pas
    pouvez vous m'aider?

  2. #2
    Membre éclairé

    Femme Profil pro
    SAS FRANCE - Support Clients France et Europe
    Inscrit en
    février 2010
    Messages
    289
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : SAS FRANCE - Support Clients France et Europe
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : février 2010
    Messages : 289
    Points : 886
    Points
    886
    Par défaut
    Bonjour,

    Pour lister les variables de toute une bibliothèque, je propose 2 méthodes :
    - soit la lecture des vues dictionnaires
    - soit la procédure contents.

    Par exemple, pour la sashelp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    /* méthode 1 */
    proc sql noprint ;
      create table ListeVar as
      select *
        from dictionary.columns 
        where LIBNAME='SASHELP';
    quit ;
     
    /* méthode 2 */
    proc contents data=sashelp._all_ out=ListeVar2 noprint;
    run ;
    Cordialement,

    --
    Géraldine CADE-DESCHAMPS
    Consultante ▪ Support Clients SAS
    Tel: +33 1 60 62 12 12 ▪ support@sas.com
    www.sas.com/france
    SAS® … THE POWER TO KNOW®

  3. #3
    Membre à l'essai
    Homme Profil pro
    Chargé Statistiques et reportings
    Inscrit en
    février 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Chargé Statistiques et reportings
    Secteur : Finance

    Informations forums :
    Inscription : février 2012
    Messages : 7
    Points : 10
    Points
    10
    Par défaut Utiliser une macro variable dans proc sql (create table &table As)
    Merci géraldine;

    c'est ce que je fait en Bas aprés la déclaration du compteur i
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    /*lancer le compteur*/
    %do i =1 %TO 2/*&nb_Table*/;
     
    /*lister les variables de la table qui correspond au ciompteur i*/
    proc sql;
    create table &Table. AS
    select *
    from dictionary.columns
    where upcase(libname)= 'SASHELP' and
          upcase(memname)in (&Table_Quote.)
    ;
    quit;
    dans cette partie, je déclare i un compteur qui varie entre 1 et le nbre de ligne dans la table List_table
    et je liste les variables de la table qui corresponds à la ligne i
    car j'e dois lister les variable de toutes les tables existantes dans SASHELP, je ne veux par répeter n fois le code du dictionnaire variable.

    cordialement
    AO

  4. #4
    Membre à l'essai
    Homme Profil pro
    Chargé Statistiques et reportings
    Inscrit en
    février 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Chargé Statistiques et reportings
    Secteur : Finance

    Informations forums :
    Inscription : février 2012
    Messages : 7
    Points : 10
    Points
    10
    Par défaut Le problème est résolu
    Le problème est résolu avec les CALL EXECUTE, le programme est le suivant:

    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
    19
    /*Lister toute les tables du reprtoire*/
    proc sql;
    create table List_Table AS
       select * /*libname, memname, nvar, objname*/
       from dictionary.tables
       where upcase(libname)= 'SASHELP' and
             upcase(memtype)='DATA';
    quit;
     
    /*lister toutes les variables existantes dans  chaque table du répertoire*/
    DATA _NULL_ ;
      SET List_Table ;
        /* pour chaque indicateur */
      CALL EXECUTE("PROC SQL ; CREATE TABLE " !! memname !! " AS ") ;
      CALL EXECUTE("SELECT *" ) ;
      CALL EXECUTE("FROM dictionary.columns ") ;
      CALL EXECUTE("WHERE upcase(libname)= 'SASHELP' and upcase(memname)= '" !! memname !!"'") ;
      CALL EXECUTE(" ; QUIT ;") ;
    RUN ;

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/10/2009, 09h02
  2. Réponses: 2
    Dernier message: 03/11/2008, 07h33
  3. Lister les noms des tables d'une base access
    Par chefinf dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 10/07/2008, 18h34
  4. Réponses: 1
    Dernier message: 02/07/2008, 16h30
  5. Réponses: 2
    Dernier message: 06/04/2007, 11h48

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