Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > ODS et reporting
ODS et reporting Forum d'entraide sur les fonctionnalités de reporting de SAS : gérer les sorties et graphiques de SAS
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 31/05/2011, 11h25   #1
Membre éclairé
 
Avatar de Filippo
 
Homme Philippe
Statisticien
Inscription : mai 2004
Messages : 654
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Âge : 38
Localisation : France, Eure (Haute Normandie)

Informations professionnelles :
Activité : Statisticien

Informations forums :
Inscription : mai 2004
Messages : 654
Points : 396
Points : 396
Par défaut [ods tagsets.excelxp] Modifier le type de données XML

Bonjour,
j'édite des tableaux dans un fichier XML avec ods tagsets.excelxp.

Ca se passe très bien pour des entiers, en revanche les nombres à virgule sont exportés en XML sous forme de strings.

Quand j'édite le fichier XML avec un éditeur de texte je vois pour les entiers par exemple :

Code :
<Cell ss:StyleID="data__r1" ss:INDEX="2"><DATA ss:Type="Number">942</Data></Cell>
Alors que je vois pour les décimaux :

Code :
<Cell ss:StyleID="data__r1" ss:MergeDown="1" ss:INDEX="2"><DATA ss:Type="String">17,69</Data></Cell>
J'aimerais que les décimaux soient codés aussi sous forme de type Number car après sous Excel on ne peux plus faire d'opérations arithmétiques sans avoir à reconvertir les cellules contenant des décimaux.

J'essaie d'utiliser tagattr dans style mais cela ne change rien.

Auriez-vous une idée ?

Merci.



Code :
1
2
3
4
5
6
7
8
%macro pctCol(MyTable, MyVar1, MyVar2);
	title2 &MyLayout2 "Pourcentages (%)";
	proc tabulate DATA=&MyTable;
		class &MyVar1 &MyVar2;
		classlev &MyVar1 &MyVar2 / style={tagattr='format:##0.0'};
		TABLES &MyVar1*f=NUMx10.2 ALL='TOTAL',&MyVar2*f=NUMx10.2 * colpctn='';
	run;
%mend;
__________________
"Le sage ne dit pas ce qu'il sait alors que le sot ne sait pas ce qu'il dit"
Filippo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 11h55   #2
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 Filippo,
As-tu essayé de remplacer des points par des virgules avant d'éditer?
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 13h27   #3
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
Bonjour Filippo.
Trop de zèle dans ton programme : pour l'ODS TAGSETS, il faut laisser les nombres comme les édite SAS par défaut.
Supprime ton format NUMX dans la proc TABULATE, et tout ira déjà mieux. Les TAGATTR ne seront utiles (dans l'instruction TABLE d'ailleurs plutôt que CLASSLEV, sauf s'il s'agit de formater les valeurs de tes variables de groupe) que si tu veux des séparateurs de milliers en bonus.
En fait, Excel attend dans le XML des nombres écrits comme 1234.56 et ensuite les affiche correctement selon les préférences régionales.
Bon courage.
Olivier
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 31/05/2011, 13h38   #4
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,

J'ai 2 pistes :
1/ tester cette syntaxe :
Code :
var air hotel/style(DATA)={tagattr="format:#,###"};
2/ ou bien
- télécharger le dernier tagset (actuellement 1.116)
http://support.sas.com/rnd/base/ods/odsmarkup/

- et utiliser decimal_separator :
Code :
ods tagsets.excelxp file="c:\temp.xls" options(decimal_separator=',' );
Géraldine
Géraldine_Cade_SAS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 14h01   #5
Membre éclairé
 
Avatar de Filippo
 
Homme Philippe
Statisticien
Inscription : mai 2004
Messages : 654
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Âge : 38
Localisation : France, Eure (Haute Normandie)

Informations professionnelles :
Activité : Statisticien

Informations forums :
Inscription : mai 2004
Messages : 654
Points : 396
Points : 396
Je vous remercie pour vos réponses.

J'ai été amené à utiliser le format NUMx10.2 car Excel utilise la virgule comme séparateur décimal (et SAS le point). Comme j'édite pas mal de tableaux dans différents onglets, je cherchais à éviter de devoir faire un copier-remplacer des points en virgules dans tout le classeur.

La ligne
Code :
var &MyVar1 &MyVar2 /style(DATA)={tagattr="format:#,###"};
produit l'erreur
Citation:
ERROR 73-322: = requis.
L'option retire tout séparateur décimal dans la sortie (1758 à la place de 17,58 par exemple).

J'ai aussi essayé différents formats tagattr avec des virgules.

Je continue de chercher.

__________________
"Le sage ne dit pas ce qu'il sait alors que le sot ne sait pas ce qu'il dit"
Filippo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 14h30   #6
Membre confirmé
 
Inscription : janvier 2010
Messages : 185
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 185
Points : 250
Points : 250
Bonjour Filippo

J'utilise les tagattrs suivant avec le tagset Excel XP tagset (SAS 9.1.3, v1.47, 01/10/07 vcd) :
Code :
1
2
3
tagattr='type:Number format:#,##0' 
 
tagattr='type:Number format:0.0%'
Ca marche.


Le problème du tagset (en particulier Excel) est que son code est mouvant (d'une version à l'autre), qu'il est bogué, qu'il est fait pour excels en langue US et qu'il est assez limité (merge across, hauteur de ligne, etc). Mais l'avantage est que le code est ouvert et qu'on peut le corriger et l'augmenter en introduisant de nouvelles fonctionnalités, via les tagattrs notamment.
sasadm est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 31/05/2011, 14h59   #7
Membre éclairé
 
Avatar de Filippo
 
Homme Philippe
Statisticien
Inscription : mai 2004
Messages : 654
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Âge : 38
Localisation : France, Eure (Haute Normandie)

Informations professionnelles :
Activité : Statisticien

Informations forums :
Inscription : mai 2004
Messages : 654
Points : 396
Points : 396
Merci SASADM,
Excel ne peut pas ouvrir le fichier à cause "d'erreurs".

En éditant avec un éditeur de texte je vois que les décimaux sont avec un style XML alphanumérique.
__________________
"Le sage ne dit pas ce qu'il sait alors que le sot ne sait pas ce qu'il dit"
Filippo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 15h02   #8
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
Ce que je voulais dire Filippo, c'est qu'il y a un décalage dans l'ODS ExcelXp entre ce qu'on voit dans les sorties SAS habituelles (fenêtre Output, ODS PDF, RTF, HTML) et ce qu'on voudrait voir dans le classeur Excel.
Je suis bien d'accord que d'habitude, on mettrait un NUMX. pour avoir des virgules. Dans le cas particulier de l'ODS ExcelXp, il ne faut pas en mettre (laisse les formats par défaut de SAS) et jouer plutôt sur les TAGATTR si nécessaire (mais par défaut là encore, ça devrait déjà avoir une bonne tête).
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 15h11   #9
Membre éclairé
 
Avatar de Filippo
 
Homme Philippe
Statisticien
Inscription : mai 2004
Messages : 654
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Âge : 38
Localisation : France, Eure (Haute Normandie)

Informations professionnelles :
Activité : Statisticien

Informations forums :
Inscription : mai 2004
Messages : 654
Points : 396
Points : 396
Merci Olivier,
par défaut (sans format particulier) le fichier XML est créé avec un point comme séparateur décimal; sous Excel les cellules avec des points sont considérées comme des string.

Il faudrait simplement une option générale qui dit à SAS de mettre une virgule comme séparateur décimal. J'essaie de jouer sur mais ça ne marche pas.
__________________
"Le sage ne dit pas ce qu'il sait alors que le sot ne sait pas ce qu'il dit"
Filippo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 15h18   #10
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : février 2011
Messages : 1 006
Points : 1 703
Points : 1 703
Bonjour, je crois que c'est loption qu'il faut utiliser
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 15h21   #11
Membre éclairé
 
Avatar de Filippo
 
Homme Philippe
Statisticien
Inscription : mai 2004
Messages : 654
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Âge : 38
Localisation : France, Eure (Haute Normandie)

Informations professionnelles :
Activité : Statisticien

Informations forums :
Inscription : mai 2004
Messages : 654
Points : 396
Points : 396
Merci s_a_m,
le fichier XML contient toujours des points comme séparateurs décimaux.

__________________
"Le sage ne dit pas ce qu'il sait alors que le sot ne sait pas ce qu'il dit"
Filippo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 15h30   #12
Membre confirmé
 
Inscription : janvier 2010
Messages : 185
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 185
Points : 250
Points : 250
Quelle version du tagset utilises tu ?
sasadm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 15h34   #13
Membre éclairé
 
Avatar de Filippo
 
Homme Philippe
Statisticien
Inscription : mai 2004
Messages : 654
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Âge : 38
Localisation : France, Eure (Haute Normandie)

Informations professionnelles :
Activité : Statisticien

Informations forums :
Inscription : mai 2004
Messages : 654
Points : 396
Points : 396
Code :
1
2
3
proc template;
	source tagsets.excelxp;
run;
ne me renvoie plus la version du tagset :

Citation:
NOTE: Le chemin 'Tagsets.Excelxp' est dans : SASUSER.TEMPLAT.
2855 run;
NOTE: Procédure TEMPLATE a utilisé (Durée totale du traitement) :
temps réel 0.01 secondes
temps UC 0.01 secondes
Je l'ai mis à jour il y a moins d'un an. Je ne sais pas s'il y a une une nouvelle version depuis.
__________________
"Le sage ne dit pas ce qu'il sait alors que le sot ne sait pas ce qu'il dit"
Filippo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 15h37   #14
Membre confirmé
 
Inscription : janvier 2010
Messages : 185
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 185
Points : 250
Points : 250
Voici le contenu d'un fichier XML correctement lu par excel:
Code :
1
2
3
4
5
6
 
<Cell ss:StyleID="s75"><DATA ss:Type="Number">-0.26649854299999998</Data></Cell>
    <Cell ss:StyleID="s68"><DATA ss:Type="Number">595.23900000000003</Data></Cell>
    <Cell ss:StyleID="s68"><DATA ss:Type="Number">678.14599999999996</Data></Cell>
    <Cell ss:StyleID="s69"><DATA ss:Type="Number">0.1392835483</Data></Cell>
    <Cell ss:StyleID="s70"><DATA ss:Type="String"></Data></Cell>
Tu constates que les séparateurs sont des points.
Le style s69 :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<Style ss:ID="s69">
   <Alignment ss:Horizontal="Right" ss:Vertical="Bottom"/>
   <Borders>
    <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#000000"/>
    <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#000000"/>
    <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#000000"/>
    <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#000000"/>
   </Borders>
   <Font ss:FontName="Arial, Helvetica" ss:Size="8" ss:Color="#000000"/>
   <Interior ss:Color="#FFFFFF" ss:Pattern="Solid"/>
   <NumberFormat ss:Format="0.0%"/>
   <Protection/>
  </Style>
sasadm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 15h40   #15
Membre éclairé
 
Avatar de Filippo
 
Homme Philippe
Statisticien
Inscription : mai 2004
Messages : 654
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Âge : 38
Localisation : France, Eure (Haute Normandie)

Informations professionnelles :
Activité : Statisticien

Informations forums :
Inscription : mai 2004
Messages : 654
Points : 396
Points : 396
Oui en fait pour les décimaux j'obtiens :

Code :
DATA ss:Type="String">17.69
Alors que je devrais avoir :

Code :
DATA ss:Type="Number">17,89
__________________
"Le sage ne dit pas ce qu'il sait alors que le sot ne sait pas ce qu'il dit"
Filippo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 15h41   #16
Membre confirmé
 
Inscription : janvier 2010
Messages : 185
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 185
Points : 250
Points : 250
Citation:
Envoyé par Filippo Voir le message
Code :
1
2
3
proc template;
	source tagsets.excelxp;
run;
ne me renvoie plus la version du tagset :



Je l'ai mis à jour il y a moins d'un an. Je ne sais pas s'il y a une une nouvelle version depuis.
Quand tu executes ton programme ods, la version n'est pas affichée dans la log ?

Et en l'executant avec l'option options(doc='help') ?
sasadm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 15h43   #17
Membre confirmé
 
Inscription : janvier 2010
Messages : 185
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 185
Points : 250
Points : 250
Citation:
Envoyé par Filippo Voir le message
Oui en fait pour les décimaux j'obtiens :

Code :
DATA ss:Type="String">17.69
Alors que je devrais avoir :

Code :
DATA ss:Type="Number">17,89
Chez moi <Data ss:Type="Number">17.89</Data> fonctionne. Avec excel 2003.
sasadm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 16h23   #18
Membre éclairé
 
Avatar de Filippo
 
Homme Philippe
Statisticien
Inscription : mai 2004
Messages : 654
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Âge : 38
Localisation : France, Eure (Haute Normandie)

Informations professionnelles :
Activité : Statisticien

Informations forums :
Inscription : mai 2004
Messages : 654
Points : 396
Points : 396
Je viens de trouver !

Code :
1
2
3
4
5
6
7
8
%macro pctCol(MyTable, MyVar1, MyVar2);
	title2 &MyLayout2 "Pourcentages (%)";
	proc tabulate DATA=&MyTable f=commax3.2 style={tagattr='type:Number Format:###0.0'};
		class &MyVar1 &MyVar2;
		classlev &MyVar1 &MyVar2 ;
		TABLES &MyVar1 ALL='TOTAL',&MyVar2 * colpctn='' / misstext="";
	run;
%mend;
Avec NUMx10.2 j'avais tous les pourcentages multipliés par 100.

Je vous remercie tous pour vos réponses.

__________________
"Le sage ne dit pas ce qu'il sait alors que le sot ne sait pas ce qu'il dit"
Filippo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 17h07   #19
Membre éclairé
 
Avatar de Filippo
 
Homme Philippe
Statisticien
Inscription : mai 2004
Messages : 654
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Âge : 38
Localisation : France, Eure (Haute Normandie)

Informations professionnelles :
Activité : Statisticien

Informations forums :
Inscription : mai 2004
Messages : 654
Points : 396
Points : 396
Il y avait encore plus simple.

Aucun format ni option dans la proc tabulate mais l'option générique suivante :

Code :
OPTION CTRYDECIMALSEPARATOR=',';
Et ça marche.

__________________
"Le sage ne dit pas ce qu'il sait alors que le sot ne sait pas ce qu'il dit"
Filippo 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 17h36.


 
 
 
 
Partenaires

Hébergement Web