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 : Récupérer la dernière valeur


Sujet :

Macro

  1. #1
    Membre averti
    Femme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 272
    Points : 417
    Points
    417
    Par défaut Call symput : Récupérer la dernière valeur
    Bonjour,
    Je n'arrive pas à récupérer la dernière macro-variable créée
    (je ne connais pas a priori la taille du tableau)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    data _NULL_ ;
    		set Projet.&nomAction;
    		call symput('N',_N_) ;
    	run;
    %put &&date&N..;
    Si j'écrit c'est ok, mais pour la macro-variable de fin, je dois avoir un problème de syntaxe
    J'y ai passé un certain temps , quelqu'un pourrait-il me donner un coup de pouce, svp?

  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
    Ca ne marche pas à cause des blancs qui sont enregistrés devant ton nombre &N.
    C'est un problème lié au call symput.
    Au par avant, il était courant de faire call symput ("N", left(trim(_N_))) pour enlever ces blancs.
    Depuis la V9.1, il y a call symputX qui permet de mieux gérer ce cas de figure.
    Demonstration par le code 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
    option nonotes nosource ;
    data test ;
        format date yymmdd10. ;
        do date = "21nov1976"d to "24dec1976"d ; output ; end ;
    run ;
     
    DATA _NULL_ ;
    		SET test ;
            CALL SYMPUT (COMPRESS("date"||_N_),put(date, ddmmyy10.)) ;  
    		call SYMPUT ('N'                  ,_N_                 ) ;
    		call SYMPUTx('Nx'                 ,_N_                 ) ;
    run;
    %put Avec call symput , _N_  = _&N._ , %nrstr(date&N) = date&N. --> Il y aura une erreur :(;
    %put Avec call symputX, _NX_ = _&NX._, %nrstr(date&Nx) = date&Nx. --> Fonctionnera bien :) ;
    %put &&date&Nx..;

  3. #3
    Membre averti
    Femme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 272
    Points : 417
    Points
    417
    Par défaut
    Citation Envoyé par RemiBousquet Voir le message
    Ca ne marche pas à cause des blancs qui sont enregistrés devant ton nombre &N.
    C'est un problème lié au call symput.
    Au par avant, il était courant de faire call symput ("N", left(trim(_N_))) pour enlever ces blancs.
    Depuis la V9.1, il y a call symputX qui permet de mieux gérer ce cas de figure.
    Demonstration par le code 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
    option nonotes nosource ;
    data test ;
        format date yymmdd10. ;
        do date = "21nov1976"d to "24dec1976"d ; output ; end ;
    run ;
     
    DATA _NULL_ ;
    		SET test ;
            CALL SYMPUT (COMPRESS("date"||_N_),put(date, ddmmyy10.)) ;  
    		call SYMPUT ('N'                  ,_N_                 ) ;
    		call SYMPUTx('Nx'                 ,_N_                 ) ;
    run;
    %put Avec call symput , _N_  = _&N._ , %nrstr(date&N) = date&N. --> Il y aura une erreur :(;
    %put Avec call symputX, _NX_ = _&NX._, %nrstr(date&Nx) = date&Nx. --> Fonctionnera bien :) ;
    %put &&date&Nx..;
    Merci
    Je ne connaissais pas call symputx!
    Si tu as encore quelques minutes, pourrais-tu m'expliquer, stp, quels sont les blancs enregistrés davant &N?
    Apparemment, j'utilise call symput sans avoir très bien compris comment cela fonctionne...

  4. #4
    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
    Je pense que call symput crée une macro variable qui contient par défaut 12 caractères et renseigne la valeur "à droite".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    option nonotes nosource ; 
    data _NULL_ ;
        x = 123456789012 ;    
        y = 1 ;
        call symput("test1",x);
        call symput("test2",y);
    run ;
    %put *|---(12)---|* ;
    %put *&test1.* ;
    %put *&test2.* ;
    Call symputx et call symput sont bien décrits dans ce doc :
    http://support.sas.com/techsup/technote/ts739.pdf

  5. #5
    Membre averti
    Femme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 272
    Points : 417
    Points
    417
    Par défaut
    Merci pour ce bon exemple et pour la doc
    Je vais m'y plonger de ce pas

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

Discussions similaires

  1. [Binding / DataGrid] Récupérer la dernière valeur d'une liste
    Par Hyome dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 16/11/2010, 22h23
  2. Réponses: 5
    Dernier message: 12/05/2010, 02h29
  3. [Oracle] Récupérer la dernière valeur insérée
    Par billainfo dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 03/09/2007, 14h50
  4. Réponses: 7
    Dernier message: 06/03/2006, 12h19
  5. [Séquences] Pour récupérer la dernière valeur
    Par tnodev dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 24/05/2005, 11h35

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