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 :

Call symput : enregistrement


Sujet :

Macro

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2012
    Messages : 36
    Points : 17
    Points
    17
    Par défaut Call symput : enregistrement
    Bonjour à tous !

    Je rencontre un problème tout à fait inattendu qui me paraît simple mais en même temps je m'arrache les cheveux pour trouver une solution...
    J'ai une table comme ci-dessous :
    Anncpt
    2003
    2004
    2005
    2006
    2007
    2008
    2009
    2010
    2012

    Je voudrais enregistrer comme macro-variable ann_1 la valeur 2003, ann_2 la valeur 2004 etc jusqu'à ann_9 la valeur 2012.
    J'utilise pour cela le code (ma table qui est en fait une colonne s'appelle annees_a_considerer) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    data annees_a_considerer_test;
    set annees_a_considerer;
    call symput('ann_'||compress(compteur),anncpt);
    run;
    Et SAS n'enregistre que jusqu'à ann_8, pour lui ann_9 n'existe pas alors qu'elle devrait valoir 2012.
    J'utilise cette procédure car les années pourront changer si les données en entrée sont différentes, je ne peux pas les inscrire en dur.
    Je signale que ce code fonctionne pour des années qui se suivent, par exemple la même table avec de 2003 à 2012 sans trou comme ici. Mais ce que je ne comprends pas, c'est que ce code devrait marchait aussi dans ce cas.

    Avez-vous une idée ?
    Merci !

  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;
    à quoi te sert le CALL SYMPUT dans ton code ? et tu dis que ça a marché ? pour les années qui se suivent ?

    bref, moi je vois un truc comme ça :
    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
     
    data annees_a_considerer;
    input
    Anncpt;
    datalines;
    2003
    2004
    2005
    2006
    2007
    2008
    2009
    2010
    2012
    ;
    run;
     
     
    DATA _null_;
    SET annees_a_considerer;
    call symputx ('n',_n_);
    call symputx(cats('ann_',(_n_)),anncpt);
    run; 
     
    %macro boucle;
    	%do i=1 %to &n.;
            %put Année &i. =&&ann_&i.;
    	%end;
    %mend;
    %boucle;

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2012
    Messages : 36
    Points : 17
    Points
    17
    Par défaut
    Merci de ton aide, cela fonctionne !

    Quelle est la différence entre un call symput et un call symputx ?

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 114
    Points : 158
    Points
    158
    Par défaut CALL SYMPUTX
    Bonjour,
    Il me semble que la différence entre CALL SYMPUT et CALL SYMPUTX se trouve au niveau du traitement de la valeur récupérée de l'étape data.

    ==> CALL SYMPUT convertit la valeur récupérée de l'étape data en texte mais la laisse telle qu'elle.
    ==> CALL SYMPUTX recupère la valeur de l'étape data, convertit en texte et aligne la valeur à gauche systématiquement, il me semble.

    A vérifier .

  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
    CALL SYMPUTX pemet de :

    - Possibilité de déclarer les macros variables Globale ou local.
    - Aligner à gauche.
    - Obtenir du numérique en sortie.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2012
    Messages : 36
    Points : 17
    Points
    17
    Par défaut
    Super, merci beaucoup ) vous !

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

Discussions similaires

  1. [Macro] la macro call symput
    Par r_dani dans le forum Macro
    Réponses: 2
    Dernier message: 17/10/2008, 15h03
  2. Réponses: 4
    Dernier message: 10/07/2008, 15h51
  3. macro avec call symput
    Par kabstat dans le forum Macro
    Réponses: 14
    Dernier message: 04/07/2008, 23h08
  4. erreur sur call symput
    Par Tyler Durden dans le forum Macro
    Réponses: 12
    Dernier message: 28/05/2008, 17h25
  5. utilisation du call symput
    Par mioke dans le forum Macro
    Réponses: 14
    Dernier message: 13/05/2008, 11h42

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