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

SAS Base Discussion :

PROC FORMAT remplaçant des chiffres par des noms de variables


Sujet :

SAS Base

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur d'études / Biostatisticien
    Inscrit en
    Décembre 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études / Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 354
    Points : 194
    Points
    194
    Par défaut PROC FORMAT remplaçant des chiffres par des noms de variables
    Bonjour,

    Pour faire simple, j'ai une longue longue longue macro et en début de macro une table A qui contient des chiffres. Ce qui se passe c'est qu'à un moment de ma macro j'applique une proc FORMAT sur une table B qui n'a rien à voir avec la table A et également remplit de chiffres. le principe de ce FORMAT est de remplacer les chiffres par des noms de variables.

    Mon problème: quand j'applique ma proc FORMAT sur ma table B, et bien ma table A subit également les changements ce qui fout ma macro en l'air...

    Voici le code que j'utilise:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    PROC FORMAT CNTLIN = WORK.FORMAT;
    RUN;
    QUIT;
     
    DATA TABLE_B;
    SET TABLE_B;
    FORMAT var: var.;
    RUN;
    QUIT;
    Quelqu'un peut-il me dire pourquoi? alors qu'il semble évident que dans mon étape DATA j'applique mon FORMAT uniquement à la bonne table... peut-être la proc FORMAT? mais j'avais cru comprendre que c'était juste pour charger mon FORMAT et pouvoir l'utiliser correctement vis à vis de mon objectif...

    Désolé mais je sèche...

    En vous remerciant d'avance pour votre intérêt (une fois de plus...) à mon problème

  2. #2
    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
    a mon avis, un bout de code dans la longue longue macro doit altérer la table A.
    N'oubliez pas de cliquer sur lorsque votre problème est réglé !

  3. #3
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    Bonjour,
    Je ne connais pas cette syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PROC FORMAT CNTLIN = WORK.FORMAT;
    RUN;
    QUIT;
    Est ce que ce code n'applique pas ce format à toutes les tables dans la work?

  4. #4
    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
    en théorie cela lit la table nommée format et y récupère un format composé à partir d'une table selon des noms de colonnes prédéfinies. regarde CNTLIN dans l'aide.
    N'oubliez pas de cliquer sur lorsque votre problème est réglé !

  5. #5
    Membre habitué
    Homme Profil pro
    Ingénieur d'études / Biostatisticien
    Inscrit en
    Décembre 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études / Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 354
    Points : 194
    Points
    194
    Par défaut
    mon avis, un bout de code dans la longue longue macro doit altérer la table A.
    J'aurais adoré que ça soit celà mais j'ai vérifié avec le moteur de recherche et la table A n'est réellement utilisée qu'au tout début de la macro et à la fin pour relancer la macro depuis le début.

    Ensuite j'ai du coup cherché l'erreur dans toute la macro en mettant deux proc PRINT de ma table pour être sur à 100% de là où les changements se font et c'est bien là.

    Eventuellement je me demande aussi si le CNTLIN (que je connais sans plus en fin de compte) ne serait pas à la base de mon problème avec une action comme évoquée par Brice.

    Sincèrement je sèche, il est stipulé nulle part dans mon programme que TABLE A = TABLE B ou encore:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    DATA TABLE_A;
    SET TABLE_A;
    FORMAT var: var.;
    RUN;
    QUIT;

  6. #6
    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
    Et par le plus grand des hasards, ta table A n'aurait pas une variable avec un format du nom de VAR. ? Que tu aurais créé pour autre chose et qui se trouve remplacé par celui que tu crées avec PROC FORMAT CNTLIN ?
    Cette dernière, a priori, n'est pas suspecte : elle ne fait que créer un format et ne l'applique spontanément nulle part.
    Bon courage.
    Olivier

  7. #7
    Membre habitué
    Homme Profil pro
    Ingénieur d'études / Biostatisticien
    Inscrit en
    Décembre 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études / Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 354
    Points : 194
    Points
    194
    Par défaut
    En fait j'utilise pour la création de ces 2 tables la macro pour générer toutes les combinaisons de variable que tu m'avais donné (au passage quel macro j'en suis amoureux fou! ) .

    Et il est vrai qu'au cours de cette macro il y a la création d'un format mais pour moi quand je l'utilise sur la table A le format var se crée et quand je l'utilise sur la table B qui crée à son tour son format var, et ben elle devrait écraser le var de la table A par le var de la table B... et en effet, par rapport à ta question, c'est exactement el cas

    Du coup j'ai essayé cette syntaxe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    proc catalog cata = work.formats
    delete var (et = format);
    run;
    quit;
    A noter que dans la macro en question: http://www.developpez.net/forums/d10...-combinatoire/ il semblerait que le FORMAT soit stoké dans work.format et non work.formats (je dis peut-être une bétise remarque...) et quand j'essaie de modifier dans ma proc CATALOG ben ça passe pas.

    Bref, sinon j'ai donc essayé la syntaxe ci-dessus et j'ai toujours mon problème...

    EDIT: Par contre c'est bien là que j'ai mon problème...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    PROC FORMAT CNTLIN = WORK.FORMAT;
    RUN;
    QUIT;

  8. #8
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    T'as éssayé la proc format classic (value) ?

  9. #9
    Membre habitué
    Homme Profil pro
    Ingénieur d'études / Biostatisticien
    Inscrit en
    Décembre 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études / Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 354
    Points : 194
    Points
    194
    Par défaut
    Et bien en fait le passage par les 3 lignes qui m'embêtent est obligatoire puisqu'il faut créé un format sur quelque chose qui varie (le nom et la position des différentes variables à combiner), d'où le passage par une étape DATA.

    Bon aprés c'est peut-être réalisable autrement, mais quand même je pense qu'il doit y avoir plus simple...

    EDIT: Eventuellement je réalise que je peux appliquer le passage inverse du format et ainsi retrouver les valeurs de la table A, la différence entre la table A et B c'est que la table A je m'en sers en tout début et en toute fin de mon programme contrairement à la table B que j'utilise un cours instant et puis la jète.
    Seulement je viens de tester INFORMAT et ça ne fait pas vraiment ce que je pensais...

  10. #10
    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
    Si je résume en simplifiant, tu crées d'abord un format VAR. pour la table A, qui te sert en début de macro. Puis tu crées un autre format, VAR. toujours, qui ne correspond pas à la même chose, mais s'applique à la table B.
    Il me semble donc très logique qu'à la 2e version du format VAR. elle s'applique partout où on a associé ce format : dans la table B mais aussi dans la A. Car un format n'est pas stocké dans les données, il n'y a qu'un lien vers le format qui est sollicité quand on utilise la table.
    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
    PROC FORMAT ;
      VALUE var
        1 = "A"
    	2 = "B"
      ;
    RUN ;
    DATA work.a ;
      DO x=1,2 ;
        OUTPUT ;
      END ;
      FORMAT x var. ;
    RUN ;
    PROC FORMAT ;
      VALUE var
        1 = "C"
    	2 = "D"
      ;
    RUN ;
    Une solution serait de créer des formats de noms différents pour les tables A et B : comme ils ne racontent pas la même histoire, ce serait logique à mes yeux et ça éviterait les confusions.
    Une 2e solution serait de re-créer la 1e version du format VAR. à la fin de ta macro, au moment où tu n'as plus besoin de la table B et où tu veux te resservir de la table A.
    Bon courage.
    Olivier

  11. #11
    Membre éclairé

    Femme Profil pro
    SAS FRANCE - Support Clients France et Europe
    Inscrit en
    Février 2010
    Messages
    289
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : SAS FRANCE - Support Clients France et Europe
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 289
    Points : 886
    Points
    886
    Par défaut
    Bonjour,

    Une théorie : Peut-être que le format var. est déjà appliqué à la table A ? la proc format mettrai à jour un format existant... et ainsi A bénéficie des nouvelles modalités du format...

    Géraldine Cade
    Cordialement,

    --
    Géraldine CADE-DESCHAMPS
    Consultante ▪ Support Clients SAS
    Tel: +33 1 60 62 12 12 ▪ support@sas.com
    www.sas.com/france
    SAS® … THE POWER TO KNOW®

  12. #12
    Membre habitué
    Homme Profil pro
    Ingénieur d'études / Biostatisticien
    Inscrit en
    Décembre 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études / Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 354
    Points : 194
    Points
    194
    Par défaut
    Géraldine et Olivier vous avez parfaitement ciblé mon problème et grace à vous j'y vois plus clair! Bref j'ai plus ou moins bidouillé pour que ça marche enfin.

    Merci à vous 4 pour votre aide!

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

Discussions similaires

  1. remplacer des chiffres par des lettres, & vis versa
    Par Argorate dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 16/08/2006, 19h36
  2. Réponses: 4
    Dernier message: 30/05/2006, 17h21
  3. Recherchez les noms débutant par des chriffres ou des /[% ..
    Par jack1234 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 30/09/2005, 19h55
  4. Sélectionner un mois d'un mouthcalendar par des chiffres
    Par bertrand_declerck dans le forum Composants VCL
    Réponses: 7
    Dernier message: 30/08/2005, 10h21
  5. comment récupere des element par le nom de la balise?
    Par MASSAKA dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 21/08/2005, 19h59

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