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 :

Probleme insertion des NOMS de variables dans un fichier


Sujet :

Macro

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Points : 40
    Points
    40
    Par défaut Probleme insertion des NOMS de variables dans un fichier
    Bonjour,

    J'essaie de mettre au point une macro qui génère dans un fichier texte les instructions SQL d'insertion des valeurs d'une table SAS :

    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
     
    %MACRO SAS2SQL(table);
    *Récupération des noms des variables dans une table;
    proc contents data=&table out=content noprint;
    run;
     
    *Assignation des noms de variables à des macro-variables;
    DATA _null_; SET content end=eof;
    format x $1000.;
    retain x;
     
    call symput('var'||left(trim(_n_)),NAME);
    call symput('nb_var',_n_);
    x=CATS(x,',',NAME);
    if eof then x=SUBSTR(x,2);
    call symput('l_var', x);
    run;
    %do i =1 %TO &nb_var;
        %put Variable &i : &&var&i..;
    %end;
     
    %put liste des variables : &l_var;
    %put creation du fichier...;
     
    data _null_;
    set &table;
    file "C:\Documents and Settings\prime-l\Bureau\test.txt";
    length ligne $ 1000;
     
    /*Creation de la ligne*/
    %do i=1 %to &nb_var;
    x=&&var&i..;
    y=put(x,$20.);
    ligne=CATS(ligne,',',y);
    %end;
     
    ligne=CATS("INSERT INTO table (",&l_var ,") VALUES (",SUBSTR(ligne,2),");");
     
    put ligne;
    run;
     
    %MEND SAS2SQL;
    sauf que lors de l'insertion de la nouvelle ligne la macro-variable &l_var insère les VALEURS et pas les NOMS des variables...
    Et là je sèche...
    Quelqu'un peut m'aider ?

  2. #2
    Membre éclairé
    Homme Profil pro
    responsable adjoint service stat
    Inscrit en
    Mars 2009
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : responsable adjoint service stat
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2009
    Messages : 448
    Points : 823
    Points
    823
    Par défaut
    Peut-être peux tu tenter ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ligne=CATS("INSERT INTO table (&l_var) VALUES (",SUBSTR(ligne,2),");");

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Points : 40
    Points
    40
    Par défaut
    Heuuuuh bah alors là je comprend pas j'allais te répondre que j'avais déjà essayé et que ça m'affichais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INSERT INTO table (&l_var) VALUES
    Mais en fait non...
    maintenant ça marche....

    Merci !!

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Points : 40
    Points
    40
    Par défaut
    Oups,

    En fait je ne sais pas pourquoi non plus, SAS me rognais la fin de ligne...

    Voilà donc le code qui marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    vars="&l_var";
    ligne=CATS("INSERT INTO table (",vars,") VALUES (",SUBSTR(ligne,2),");");
     
    put ligne;

  5. #5
    Rédacteur

    Homme Profil pro
    SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Inscrit en
    Avril 2009
    Messages
    2 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2009
    Messages : 2 497
    Points : 6 064
    Points
    6 064
    Par défaut
    Tu n'avais jamais vu cela auparavant ?

    http://support.sas.com/rnd/base/ods/odsmarkup/sql.html

    http://support.sas.com/rnd/base/ods/odsmarkup/sql.sas


    Il ne faut pas hésiter à vous rendre sur le site de SAS. Énormément de choses ont déjà été faites depuis 2004 sur le sujet par exemple et énormément d'explications et tutoriels y sont archivés.

    D'ailleurs, ce serait une occasion pour les modo de décrire comment naviguer sur le site support de SAS ou le site alternatif http://www2.sas.com/ , une vraie mine d'informations s'y trouvent mais il ne faut pas s'y perdre

    Stéphane.

Discussions similaires

  1. Attribuer des noms de variables dans une boucle
    Par sanguisorbe dans le forum Langage
    Réponses: 8
    Dernier message: 13/06/2014, 15h42
  2. [MySQL] Des noms de variables dans une boucle
    Par nicolas2603 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 25/08/2009, 14h51
  3. passer des nom de symbole dans une variable
    Par eveilside dans le forum Flash
    Réponses: 2
    Dernier message: 29/05/2009, 08h52
  4. Réponses: 4
    Dernier message: 10/04/2008, 22h23
  5. Réponses: 13
    Dernier message: 14/06/2003, 22h15

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