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 :

Récupérer le format d'une variable dans une macro-variable


Sujet :

Macro

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 347
    Points : 235
    Points
    235
    Par défaut Récupérer le format d'une variable dans une macro-variable
    Bonjour,

    Je souhaite récupérer le format d'une variable (que ce soit un format crée soit-même ou alors un format classique de SAS genre $1. ou BEST12.) en dans une macro variable mais pas moyen de mettre la main dessus.
    La PROC CONTENTS a bien une variable "format" mais qui est toujours vide (sur la sashelp.class en tout cas).

    Est-ce possible ?

    Merci,

    alers

  2. #2
    Membre éprouvé
    Homme Profil pro
    Ingénieur Pilotage
    Inscrit en
    Avril 2009
    Messages
    405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur Pilotage
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2009
    Messages : 405
    Points : 1 063
    Points
    1 063
    Par défaut
    Bonjour !

    J'utiliserais pas un proc content mais la table vcolumn de SASHELP :

    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
    data test ; 
    format var3 $10. var4 1. ;
    input var:$ var2 var3:$10. var4 ; 
    cards ; 
    var1 1 var1 1
    var2 2 var2 2
    var3 3 var3 3
    ;
    run ; 
     
    proc sql ; 
    create table t as 
    select name, format , type from sashelp.vcolumn where memname = "TEST"; 
    quit ; 
     
    data t (drop=type); 
    set t; 
    if type = "num" and format = "" then format = "BEST12.0"; 
    if type = "char" and format = "" then format = "$8.0";
    call symput(name,format) ; 
    run ;
    %put &var.
    attention ! le nom de la table est en majuscule ( question classique à la certification lol).

    Cdt

    Rom
    I always thought that the person who specialized in using just SAS PROCS should
    be known as the SAS Proctologist.

  3. #3
    Membre actif
    Inscrit en
    Juillet 2010
    Messages
    199
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 199
    Points : 214
    Points
    214
    Par défaut
    ça dépend de la table de la sashelp que tu utilises.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ods output position = listvar ;
    proc contents data=sashelp.prdsale varnum ;
    run ;
     
    proc sql ;
    	select Format into : fmt 
    	from listvar 
    	where variable ="ACTUAL" ;
    quit ;
     
    %put le format de la variable ACTUAL est : &fmt. ;
    Mohamed.

  4. #4
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    Bonjour.
    Tu peux utiliser la fonction VFORMAT dans l'étape DATA, avec un CALL SYMPUTX pour alimenter ta macro-variable. Elle a l'avantage de fournir des réponses même quand la format n'a qu'un format implicite, comme c'est le cas dans SASHELP.CLASS.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    DATA _NULL_ ;
      SET sashelp.class ;
      CALL SYMPUTX("format_name",  VFORMAT(name) );
      CALL SYMPUTX("format_sex",  VFORMAT(sex) );
      CALL SYMPUTX("format_age",  VFORMAT(age) );
      CALL SYMPUTX("format_weight",  VFORMAT(weight) );
      CALL SYMPUTX("format_height",  VFORMAT(height) );
      STOP ;
    RUN ;
    %PUT le format de NAME est &format_name ;
    %PUT le format de SEX est &format_sex ;
    %PUT le format de AGE est &format_age ;
    %PUT le format de WEIGHT est &format_weight ;
    %PUT le format de HEIGHT est &format_height ;
    Je ne peux m'empêcher de me demander, ici comme souvent, quelle peut bien être l'utilité de stocker un nom de format dans une macro-variable ? Est-ce que des ARRAY et des boucles et des VFORMAT ne permettraient pas de répondre au problème sans utiliser des macro-variables ?
    Bon courage.
    Olivier
    Bon courage.
    Olivier

  5. #5
    Membre actif
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 347
    Points : 235
    Points
    235
    Par défaut
    Citation Envoyé par lelensois16 Voir le message
    Bonjour !

    J'utiliserais pas un proc content mais la table vcolumn de SASHELP :

    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
    data test ; 
    format var3 $10. var4 1. ;
    input var:$ var2 var3:$10. var4 ; 
    cards ; 
    var1 1 var1 1
    var2 2 var2 2
    var3 3 var3 3
    ;
    run ; 
     
    proc sql ; 
    create table t as 
    select name, format , type from sashelp.vcolumn where memname = "TEST"; 
    quit ; 
     
    data t (drop=type); 
    set t; 
    if type = "num" and format = "" then format = "BEST12.0"; 
    if type = "char" and format = "" then format = "$8.0";
    call symput(name,format) ; 
    run ;
    %put &var.
    attention ! le nom de la table est en majuscule ( question classique à la certification lol).

    Cdt

    Rom
    Bonjour et merci,

    Si je comprends bien dans ce programme on a parfois des variables sans format et il faut l'entrer soit-même (if type = "num" and format = "" then format = "BEST12.0"; if type = "char" and format = "" then format = "$8.0" ?

    J'ai pris une table de sashelp pour l'exemple mais en réalité je me servirai d'autres tables. Il faut que cela fonctionne quelque soit la table te quelque soit la variable. :/

    Citation Envoyé par olivier.decourt Voir le message
    Je ne peux m'empêcher de me demander, ici comme souvent, quelle peut bien être l'utilité de stocker un nom de format dans une macro-variable ? Est-ce que des ARRAY et des boucles et des VFORMAT ne permettraient pas de répondre au problème sans utiliser des macro-variables ?
    Il existe sans aucun doute des manières de faire bien plus rapides, et je serais ravis de les connaitre. J'ai pensé à une macro-variable car cela semblait correspondre à mon attente.

    Le contexte : j'utilise plusieurs macros-programmes qui nécessitent d'entrer le format de la variable étudiée. Pour l'instant, on entre le format en paramètre à l'appel de la macro.
    Mon but : éviter d'avoir à le faire.

    J'ai donc pensé à trouver le dit format, le stocker en macro-variable et l'appeler directement dans le macro-programme à l'endroit où j'en ai besoin. Mais il y a sans doute mieux et plus rapide.

    Le dernier bout code marche sur ma table de test en tout cas.

    Merci encore

    alers

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

Discussions similaires

  1. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  2. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  3. [POO] dans une classe, appeler une fonction dans une méthode
    Par arnaudperfect dans le forum Langage
    Réponses: 3
    Dernier message: 26/08/2007, 23h04
  4. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 10h13
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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