Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > SAS Base
SAS Base Forum d'entraide sur SAS base : étape data, procédures non statistiques, procédures non graphiques, SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/06/2011, 18h06   #1
Membre habitué
 
Homme Julien
Ingénieur d'études / Biostatisticien
Inscription : décembre 2009
Messages : 304
Détails du profil
Informations personnelles :
Nom : Homme Julien
Localisation : France

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

Informations forums :
Inscription : décembre 2009
Messages : 304
Points : 101
Points : 101
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 :
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
joyeux_lapin13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 18h12   #2
Rédacteur
 
Homme Stéphane
Consultant et formateur SAS et Cognos
Inscription : avril 2009
Messages : 1 791
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Consultant et formateur SAS et Cognos
Secteur : Conseil

Informations forums :
Inscription : avril 2009
Messages : 1 791
Points : 4 012
Points : 4 012
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é !

Moteur de recherche dans les papiers SAS
datametric est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 18h15   #3
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Bonjour,
Je ne connais pas cette syntaxe
Code :
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?
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 18h24   #4
Rédacteur
 
Homme Stéphane
Consultant et formateur SAS et Cognos
Inscription : avril 2009
Messages : 1 791
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Consultant et formateur SAS et Cognos
Secteur : Conseil

Informations forums :
Inscription : avril 2009
Messages : 1 791
Points : 4 012
Points : 4 012
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é !

Moteur de recherche dans les papiers SAS
datametric est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2011, 08h30   #5
Membre habitué
 
Homme Julien
Ingénieur d'études / Biostatisticien
Inscription : décembre 2009
Messages : 304
Détails du profil
Informations personnelles :
Nom : Homme Julien
Localisation : France

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

Informations forums :
Inscription : décembre 2009
Messages : 304
Points : 101
Points : 101
Citation:
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 :
1
2
3
4
5
6
 
DATA TABLE_A;
SET TABLE_A;
FORMAT var: var.;
RUN;
QUIT;
joyeux_lapin13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2011, 08h36   #6
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 467
Détails du profil
Informations personnelles :
Nom : Homme Olivier Decourt
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 1 467
Points : 2 823
Points : 2 823
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.
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2011, 09h50   #7
Membre habitué
 
Homme Julien
Ingénieur d'études / Biostatisticien
Inscription : décembre 2009
Messages : 304
Détails du profil
Informations personnelles :
Nom : Homme Julien
Localisation : France

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

Informations forums :
Inscription : décembre 2009
Messages : 304
Points : 101
Points : 101
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 :
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 :
1
2
3
4
 
PROC FORMAT CNTLIN = WORK.FORMAT;
RUN;
QUIT;
joyeux_lapin13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2011, 10h07   #8
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
T'as éssayé la proc format classic (value) ?
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2011, 10h17   #9
Membre habitué
 
Homme Julien
Ingénieur d'études / Biostatisticien
Inscription : décembre 2009
Messages : 304
Détails du profil
Informations personnelles :
Nom : Homme Julien
Localisation : France

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

Informations forums :
Inscription : décembre 2009
Messages : 304
Points : 101
Points : 101
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...
joyeux_lapin13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2011, 14h35   #10
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 467
Détails du profil
Informations personnelles :
Nom : Homme Olivier Decourt
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 1 467
Points : 2 823
Points : 2 823
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 :
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.
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2011, 17h31   #11
Membre habitué
 
Femme Géraldine CADE DESCHAMPS
Support Clients SAS (France et Europe)
Inscription : février 2010
Messages : 62
Détails du profil
Informations personnelles :
Nom : Femme Géraldine CADE DESCHAMPS
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 62
Points : 139
Points : 139
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
Géraldine_Cade_SAS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2011, 09h09   #12
Membre habitué
 
Homme Julien
Ingénieur d'études / Biostatisticien
Inscription : décembre 2009
Messages : 304
Détails du profil
Informations personnelles :
Nom : Homme Julien
Localisation : France

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

Informations forums :
Inscription : décembre 2009
Messages : 304
Points : 101
Points : 101
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!
joyeux_lapin13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h41.


 
 
 
 
Partenaires

Hébergement Web