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 :

utilisation du call symput


Sujet :

Macro

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

    Informations forums :
    Inscription : Février 2008
    Messages : 167
    Points : 66
    Points
    66
    Par défaut utilisation du call symput
    Bonjour,
    J'ai un petit souci,je ne sais pas comment utiliser la call symput.
    Je vous expilque je crée une table sas qui récupére les données d'un fichier.txt cela fonctione corectement mais quand j'ai des nouvelles données dans mon fichier.txt dans ma table sas il le change et moi je voudrais cumulé ces donnée.Je ne sais pas si ces claire .je vous donne mon code pour que ce soit plus clair merci de m'aider

    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 dessin "Y:\tutut\ttt";
    data _NULL_ ;
    set dessin.parametr;
    call symput('rep',dessin.parametr);
    run;
    data dessin.parametr (drop=rep) rep(keep=rep) ;
    infile 'C:\wamp\www\Dessin\sas_dessin\parametre.txt' lrecl=500 dlm='*' dsd pad missover;
    length ref_dossier $15 lib_fic $50 nom_fichier $50 no_fic $8 libelle $50 cle $8 no_fic $9
    dlm $5 recfm $1 lrecl $8 lzciv $8 lznom $8 lzprenom $8 lv2 $8 lv3 $8 lv4 $8 lv5 $8
    lxcp $8 lxvil $8 lv6 $8 pzciv $8 pznom $8 pzprenom $8 pv2 $8 pv3 $8 pv4 $8 pv5 $8 pxcp $8
    pxvil $8 pv6 $8fichier $50 lnum $8 lnumb $8 ltyp $8 lrue $8 pnum $8 pnumb $8 ptyp $8 prue $8
    codciv1 $10 codciv2 $10 codciv3 $10 codciv4 $10 codciv5 $10
    libciv1 $10  libciv2 $10 libciv3 $10 libciv4 $10 libciv5 $10 
    rep $100 annule $1 option $200 fichier $50 keep $200 place 4 
    exclus $20 priorite 8 prio_fic $1 optionb $200 ;
    input
    ref_dossier lib_fic nom_fichier no_fic libelle cle no_fic dlm recfm lrecl lgzciv
    lgznom lzprenom lv2 lv3 lv4 lv5 lxcp lxvil lv6 pzciv pznom pzprenom pv2 pv3 pv4 
    pv5 pxcp pxvil pv6 fichier lnum lnumb ltyp lrue pnum pnumb ptyp prue codciv1 
    codciv2 codciv3 codciv4 codciv5 libciv1 libciv2 libciv3 libciv4 libciv5 rep;
    run ;

  2. #2
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    Bonjour,

    call symput permet de créer des macros variables à partir des valeurs d'une table.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    DATA _NULL_ ;
    SET dessin.parametr;
    call symput('rep',dessin.parametr);
    run;
    call symput('nom_macro_a_creer',variable_de_la_table)
    ton exemple ci dessus ne ,te permettra de créer qu'une seule macro variable.
    dessin.parametr : il doit correspondre à une variable de ta table et non le nom de la table.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    data _null_; set dessin.parametr;
    call symput('dossier_'||left(trim(_n_)),ref_dossier);
    run;
    %put _user_;
    cette exemple permet de créer pour chaque valeur de ref_dossier une macro variable de nom dossier_nume_ligne qui contiendra sa valeur.
    Consultez les FAQs et les anciens postes avant de poser vos questions. Merci

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

    Informations forums :
    Inscription : Février 2008
    Messages : 167
    Points : 66
    Points
    66
    Par défaut
    Merci j'ai un petit mieux compris.
    j'ai éssayé l'exemple que tu a fait mais a chaque fois je récupére q'une seul ligne alors que mois je voudrais qui garde mes précédente valeur en mémoire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DATA _null_; SET dessin.parametr;
    call symput('dossier_'||left(trim(_n_)),cle,ref_dossier,no_fic...);
    run;
    De plus est t'il possible de mettre plusieur valeur dans un call symput.
    merci

  4. #4
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    Une macro variable prend une seule valeur.
    Consultez les FAQs et les anciens postes avant de poser vos questions. Merci

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

    Informations forums :
    Inscription : Février 2008
    Messages : 167
    Points : 66
    Points
    66
    Par défaut
    comment je dois faire pour récupérer toute mes valeurs.

  6. #6
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    tu dois mettre autant de call symput que de variable dans ton étape data.
    Tu es sur de vouloir faire cela?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    data _null_;
    data t;
    call symput('m_var1'||left(trim(_n_)),var1);
    call symput('m_var2'||left(trim(_n_)),var2);
    run;
    Consultez les FAQs et les anciens postes avant de poser vos questions. Merci

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

    Informations forums :
    Inscription : Février 2008
    Messages : 167
    Points : 66
    Points
    66
    Par défaut
    Bonjour,

    Sur je ne sais pas, si il y'a une autre solution je suis preneur, mais si j'ai pas le choix tampis je passerai par le call symput.

    Merci

  8. #8
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    Est ce que tu peux nous expliquer le but des macros variable que tu veux créer?
    Consultez les FAQs et les anciens postes avant de poser vos questions. Merci

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

    Informations forums :
    Inscription : Février 2008
    Messages : 167
    Points : 66
    Points
    66
    Par défaut
    je vous explique,

    J'ai un site intranet sur le quel j'effectue un enregistrement sur un formulaire.
    Cette enregistrement lui est récupérer dans un fichier txt.
    Ensuite je fais une étape data sur SAS pour récupérer mon enregistrement du fichier txt cela fonctionne.
    Mais quand je fais des nouveaux enregisrement a chaque fois je n'est qu'un seul enregistrement dans ma tables sas soit le dernier enregistrement. Alors mois, la macro que je veux faire c'est de garder mes enregistrement précédent et non a chaque de fois de rénitialiser.
    Je n'est sais pas si le call symput était l'idéal?

  10. #10
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    Je ne comprends pas très bien.

    Le fichier créer par internet contient la totalité des enregistrement ou juste la dernière saisie des utilisateurs?
    Consultez les FAQs et les anciens postes avant de poser vos questions. Merci

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

    Informations forums :
    Inscription : Février 2008
    Messages : 167
    Points : 66
    Points
    66
    Par défaut
    Il n'a qu'un seul enregistrement dans le fichier txt soit le dernier enregistrement saisie par l'utilisateur

  12. #12
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    les anciènnes saisies tu les gardes ou?
    J'imagine que tu as une table (ancienne saisies) à laquelle tu ajoutes les nouvelles
    Consultez les FAQs et les anciens postes avant de poser vos questions. Merci

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

    Informations forums :
    Inscription : Février 2008
    Messages : 167
    Points : 66
    Points
    66
    Par défaut
    c'est sa le probléme c'est que je ne sais pas comment mi prendre pour garder mes anncienne saisie dans une autre table.

  14. #14
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    tout simplement il faut avoir deux tables.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    libname a "chemin";
    /*import table nouvelle enregistrement*/
    creation de la table new
    /*test si table archive existe*/
    Si non création de la table archive (table vide)
     Si oui(table archive existe)
     data archive; set archive new; run;
    la table archive et la table new ont la même structure
    Consultez les FAQs et les anciens postes avant de poser vos questions. Merci

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

    Informations forums :
    Inscription : Février 2008
    Messages : 167
    Points : 66
    Points
    66
    Par défaut
    merci,
    j'obtient ce que voulais

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

Discussions similaires

  1. Utilisation de call symput
    Par Heisenberg59 dans le forum Macro
    Réponses: 2
    Dernier message: 22/08/2012, 15h50
  2. Utilisation call symput
    Par kabstat dans le forum Macro
    Réponses: 3
    Dernier message: 09/10/2009, 11h32
  3. Réponses: 4
    Dernier message: 10/07/2008, 15h51
  4. macro avec call symput
    Par kabstat dans le forum Macro
    Réponses: 14
    Dernier message: 04/07/2008, 23h08
  5. erreur sur call symput
    Par Tyler Durden dans le forum Macro
    Réponses: 12
    Dernier message: 28/05/2008, 17h25

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