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 :

scanner un repertoire


Sujet :

Macro

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 8
    Points : 6
    Points
    6
    Par défaut scanner un repertoire
    Bonjour,

    Voilà mon pb, je dois scanner les différentes tables d'un répertoire.
    S'il existe des sous-répertoires à l'intérieur de ce dernier, je dois également les scanner. Au final, je dois avoir une table de sortie dans lequel j'ai le nom de mes tables table sas,avec différentes caractéristiques comme son option de tri, le nb d'enregistrement et si elle est compresser ou non. Je pense que je dois utiliser entre autres une proc contents, non ?
    Suis-je clair ou complètement incompréhensible ?
    Pour info, je suis un peu débutant en SAS...

    Merci pour votre aide.

  2. #2
    Membre éprouvé
    Avatar de steelspirit
    Homme Profil pro
    SAS discute
    Inscrit en
    Janvier 2008
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SAS discute
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 472
    Points : 916
    Points
    916
    Par défaut
    wouaaa rien que ça effectivement tu peux passer par un proc contents mais il faut d'abord déclarer des libnames qui pointent sur tes fichiers SAS !

    voici les étapes à suivre :
    1) stockage des chemins des répertoires dans des macro-variables
    2) parcours des macro-variables et création des libname
    3) parcours des libnames et récupération du nom des tables, ses options de tri, le nb d'enregistrement, la compression...

    étape 1:
    La commande DOS permettant de lister les fichiers d'un répertoire et des sous répertoire est : Dir /S/W
    Il faut ensuite importer le résultat de cette commande dans une table SAS. ça marche pareil que pour importer un fichier classique mais avec un filename un peu différent :

    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
     
    %let chemin=C:\;  /* Chemin à partir duquel lire les fichiers : A ADAPTER */
     
    option noxwait xsync; /*noxwait : ne pas afficher la fenetre DOS, xsync : attendre la fin de la commande pour poursuivre le traitement */
     
    filename liste pipe "DIR /W/S &chemin"; /*commande DOS a exécuter */
    /* Création de la table contenant la liste des fichiers SAS */
    data liste;
    	format liste $500.;
    	infile liste;
    	input liste $;
    run;
    /* liste_rep : on ne garde que les chemins de répertoires et on les stockes dans des macro-variables */
    data liste_rep;
         set liste;
         if index(liste,'R‚pertoire de ')>0 then do;
                liste=TRANWRD(liste,'R‚pertoire de ','');
                output;
        end;
    run;
    étape 2 :

    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
     
    %macro liste;
    data _NULL_;
           set liste_rep;
           call symput(compress('rep'||_N_),trim(left(liste))); /*création des macro-variable rep1, rep2 etc...*/
           call symput('nb_rep',trim(left(_N_))); /*nombre de répertoires au total*/
    run;
     
    %do i=1 %to &nb_rep;
     
        libname lib&i "&&rep&i";
        /* proc contents :*/
        proc contents data=lib&i.._ALL_ out=contenu&i; /* _ALL_ pour faire un contents sur toute les tables du libname */
        run;
     
    %end;
     
    %mend;
    %liste;
    voila c'est pas plus compliqué que ça

    Bon courage,

    Steel

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Steel, t'es trop fort !!
    J'ai quand même mis un moment à adapter le code mais ca marche niquel.

    Merci bien

  4. #4
    Membre éprouvé
    Avatar de steelspirit
    Homme Profil pro
    SAS discute
    Inscrit en
    Janvier 2008
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SAS discute
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 472
    Points : 916
    Points
    916
    Par défaut
    Et encore j'ai fait ça à l'arrache sans tester et sans optimiser

    Content d'avoir pu t'aider

    A+

    Steel

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

Discussions similaires

  1. scanner un repertoire et parser les fichiers XML existants
    Par processeur dans le forum Général Python
    Réponses: 2
    Dernier message: 29/07/2009, 17h35
  2. scanner un repertoire et parser les fichiers XML existants
    Par processeur dans le forum Actualités
    Réponses: 0
    Dernier message: 29/07/2009, 11h36
  3. "scanner" un repertoire
    Par floopi51 dans le forum Débuter
    Réponses: 29
    Dernier message: 20/04/2009, 09h13
  4. Scanner un repertoire dans PDI
    Par pruderic dans le forum kettle/PDI
    Réponses: 4
    Dernier message: 22/05/2008, 14h45
  5. repertoire temp dynamique
    Par killpilot dans le forum C
    Réponses: 2
    Dernier message: 26/04/2002, 16h19

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