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

SAS Base Discussion :

Importer des fichiers access vers sas automatiquement


Sujet :

SAS Base

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2008
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 86
    Points : 83
    Points
    83
    Par défaut Importer des fichiers access vers sas automatiquement
    Bonjour à tous,

    j'ai plusieurs fichier en access (.mdb) qui sont dans un endroit bien précis et qui ont des noms different et je voulais voir s'il y a une methode plus avancées ou une macro pour faire un IMPORT automatique dés qu'il y a un nouveau fichier dans cet endroit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    PROC IMPORT OUT=  Best_01022011
                DATATABLE= "BestOfPhone" 
                DBMS=ACCESSCS REPLACE;
                database="\\test\input\Best_01022011.mdb"; 
         SERVER="XS0"; 
         PORT=1211; 
         SSPI=YES;
    RUN;
    merci d'avance

  2. #2
    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,
    je te propose une sollution mais il faut que tu modifies ton programme.
    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
    libname rep Access "\\test\input\Best_01022011.mdb"
    server="XSO" port =1211 ;
     
    proc sql; 
     create table les_tables as select memname as tables  from dictionary.tables where Upcase(libname)='REP';
    quit;
    data _null_;
    set les_tables end=fin;
    if fin then call symput('nbr', _n_);
                   call symput ('tabs'!! left(_n_),tables);
    run;
     
    %macro import ;
     
      %do i=1%to &nbr.;
             data &tabs&i;
                    set rep.&tabs&i.;
             run;
      %end;
    %mend;
    %import;
    PS: je n'ai pas tester le code, à adapter si besoin.

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2008
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 86
    Points : 83
    Points
    83
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    libname rep Access "\\test\input\Best_01022011.mdb"
    pas correct car la je dois juste lui spécifier l'endroit ou je trouve mes fichier access .mdb
    alors je mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     libname rep Access "\\test\input
    puis avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    proc sql; 
     CREATE TABLE les_tables AS SELECT memname  AS TABLES, libname     FROM dictionary.TABLES  WHERE Upcase(libname)='REP'  ;
    quit;
    Il trouve pas de fichier 0

    pour etre précis:
    j'ai dans ce lien \\test\input un ensemble de fichier access (file1.mdb file2.mdb ........ xor.mdb test.mdb) que je veux importer automatiquement
    avce une macro ou une methode avancées.

  4. #4
    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
    Bon OK,
    si je comprends bien c'est les fichiers MDB que tu veux récupérer et non pas les tables.
    Méthode1:
    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
     
       filename fic "\\test\input";
     
     
       data fic_mdb (keep = fichier ); 
          length FICHIER $50; 
          retain did ; 
          did = dopen("fic"); 
          if did > 0 then do; 
             i = 1; 
             do while (dread(did,i) ne "" ) ; 
                FICHIER = dread(did,i); output;
                i = i+1 ; 
             end; 
             did = dclose(did); 
          end; 
       run;
    Méthode2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    option noxwait;
    filename cmd pipe "dir /b \\test\input";
     
       data tab;
       length fic $50.;
       infile cmd;
       input fic ;
       run;
    maintenant t'as qu'à faire une boucle sur la table ,
    t'as le choix entre un
    ou récupérer les noms de tes fichiers dans des macros avec un
    et faire une boucle par la suite.

    il y a pas mal de sujet dans le forum sur le CALL SYMPUT.
    j'espère pour toi que les noms de tes tables " à l'intérieur de tes bases Access ne varient pas" sinon tu sera obliger de mélanger cette sollution avec ce que je t'ai proposé au début " QUI N'EST PAS FAUX D 'AILLEURS"

  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
    Important;
    si dans tes répertoires, il y a d'autres fichiers qui ont d'autres extension , genre TXT,XLs, ...
    tu rajoutes cette ligne à l'étape data :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if UPCASE(scan(fichier,-1,'.'))='MDB';
    pour ne garder que les fichier Access.

  6. #6
    Membre régulier
    Inscrit en
    Novembre 2008
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 86
    Points : 83
    Points
    83
    Par défaut
    Merci pour votre response.

    Pour ce qui est :
    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
    libname user '\\Xs00\tables';
     
    filename fic "\\Xs00\input\";
     
    DATA fic_mdb (keep = fichier ); 
          length FICHIER $70; 
          retain did ; 
          did = dopen("fic"); 
          IF did > 0 then do; 
             i = 1; 
             do while (dread(did,i) ne "" )   ;  
                FICHIER = dread(did,i); output;
                i = i+1 ; 
             end; 
             did = dclose(did); 
          end;
     ; 
    run;
    jusqu'au là tout va bien je recoit une table dans mon user Fic_mdb avec tous les noms de fichier access avce extention .mdb qui se trouve dans mon lien.

    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     call symput('nbr', _n_);
    il me donne comme variable 78 qui le nbre de fichier access.

    reste a trouver comment importer en faisant le lien avec les chaque nom dans la table fic_mdb.

    expl
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    %macro import ;
    %do i=1%TO &nbr.;
        PROC IMPORT OUT= nom du fichier access
                DATATABLE=   nom du fichier access
               DBMS=ACCESSCS REPLACE;
                DATABASE=" \\Xs00\input\nom fichier acess "; 
          SERVER="XS0"; 
          PORT=1211; 
          SSPI=YES;
        RUN;
     %end;
    %mend;

  7. #7
    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
    si les noms de tes tables Access sont les mêmes que les noms de tes bases Access;

    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
    38
     
    %let chemin=\\Xs00\input\;
    filename fic "&chemin";
     
    DATA fic_mdb (keep = fichier ); 
          length FICHIER $70; 
          retain did ; 
          did = dopen("fic"); 
          IF did > 0 then do; 
             i = 1; 
             do while (dread(did,i) ne "" )   ;  
                FICHIER = dread(did,i); output;
                i = i+1 ; 
             end; 
             did = dclose(did); 
          end;
     ; 
    run; 
     
    data _null_;
    set fic_mdb  end=fin;
     if fin then call symput ('nbr', _n_);
                    call symput ('tab' !! left(_n_), scan(scan(fichier,-1,'\'),1,'.));
    run;
     
    %macro import ;
    %do i=1%TO &nbr.;
        PROC IMPORT OUT=&&tab&i.
                DATATABLE=   &&tab&i
               DBMS=ACCESSCS REPLACE;
                DATABASE=" %chemin.\%sysfunc(strip(&&tab&i...mdb)) "; 
          SERVER="XS0"; 
          PORT=1211; 
          SSPI=YES;
        RUN;
    %end;
    %mend;
    %import;

  8. #8
    Membre régulier
    Inscrit en
    Novembre 2008
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 86
    Points : 83
    Points
    83
    Par défaut
    Merci sam ca tres bien marché.

    je dois juste mettre l'ensemble des table importer en une dans la meme macro ?


    Merci pour tout

  9. #9
    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 benvanbelgie Voir le message
    je dois juste mettre l'ensemble des table importer en une dans la meme macro ?
    Sorry,
    mais je n'ai pas bien compris. Que veux tu faire au juste ?

  10. #10
    Membre régulier
    Inscrit en
    Novembre 2008
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 86
    Points : 83
    Points
    83
    Par défaut
    ce que je veux c'est une fois l import est fait pout tout les fichiers. alors je met tout les fichiers en une table style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    data All ;
    set &&tab&i ......  ;
    run;

  11. #11
    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
    ah je comprends mieux :
    donc ton code sera :
    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
    38
    39
    40
    41
    42
     
    %let chemin=\\Xs00\input\;
    filename fic "&chemin";
     
    DATA fic_mdb (keep = fichier ); 
          length FICHIER $70; 
          retain did ; 
          did = dopen("fic"); 
          IF did > 0 then do; 
             i = 1; 
             do while (dread(did,i) ne "" )   ;  
                FICHIER = dread(did,i); output;
                i = i+1 ; 
             end; 
             did = dclose(did); 
          end;
     ; 
    run; 
     
    DATA _null_;
    SET fic_mdb  end=fin;
     IF fin then call symput ('nbr', _n_);
                    call symput ('tab' !! LEFT(_n_), scan(scan(fichier,-1,'\'),1,'.));
    run;
     
    %macro import ;
    %do i=1%TO &nbr.;
        PROC IMPORT OUT=&&tab&i.
                DATATABLE=   &&tab&i
               DBMS=ACCESSCS REPLACE;
                DATABASE=" %chemin.\%sysfunc(strip(&&tab&i...mdb)) "; 
          SERVER="XS0"; 
          PORT=1211; 
          SSPI=YES;
        RUN;
    %end;
    %mend;
    %import;
    data finale;
    set 
    %do i=1%TO &nbr.;&&tab&i %end;;
    run;

  12. #12
    Membre régulier
    Inscrit en
    Novembre 2008
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 86
    Points : 83
    Points
    83
    Par défaut
    Merci ca marche

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 19
    Points : 13
    Points
    13
    Par défaut le meme code mais pour des fichier xslx
    Bonjour

    si je veux faire pareil mais avec des table excel en xlsx je remplace uniquement les extensions mdb par xlsx? ou il y a d'autres chose à faire?
    Jes uis plutot novice dans j'ai aps bien compris le code.

    merci

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

Discussions similaires

  1. [MySQL] Importer des fichiers .CSV dans BDD automatiquement
    Par Caypamoi dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 20/04/2015, 15h20
  2. [PowerShell] Importer des fichiers excel vers Base de données
    Par grinta05 dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 10/02/2015, 11h33
  3. Importation des fichiers Excel vers une base de données
    Par JonasYounes dans le forum Développement de jobs
    Réponses: 3
    Dernier message: 08/08/2014, 18h40
  4. importation des fichiers excel vers une base de donnés
    Par salmia22 dans le forum ASP.NET MVC
    Réponses: 1
    Dernier message: 24/08/2013, 16h30
  5. Importation de fichier Access vers EXCEL en VB
    Par yoruichi93 dans le forum IHM
    Réponses: 1
    Dernier message: 12/06/2006, 19h53

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