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 06/05/2011, 01h44   #1
Invité de passage
 
Homme
Étudiant
Inscription : mai 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 9
Points : 1
Points : 1
Par défaut Graphique axes des abscisses en trimestre

bonjour,
voilà je travail sur un mémoire en économétrie sur la théories de la consommation.j'ai un problème avec un graphique, j'ai voulu tracer un premier graphique avec comme variables la consommation dans le temps,donc en ordonnée j'ai le volume de la consommation et en abscisse j'ai des dates en trimestre de la forme 1986q1 1986q2 1986q3 est cela de 1986 à 2010. Problème sur le graphique j'ai bien une courbe en fonction du temps. Le petit problème c'est que l'axe des abscisses est illisibles à causse des dates en trimestre qui se suivent et qui sont trop nombreuses.
j'aurais voulu avoir les dates seulement du 1er trimestre et du 4eme trimestre ainsi de suite jusqu'à 2010
j'ai essayer avec axis1 order=(1986 to 2010 by 4) et d'autre variante mais l'axe des abscisses de change pas j'ai essayé aussi en mettant 1986q1 mais SaS ne reconnait pas q1

j'ai cherché dans pas mal de cours mais je trouve pas de solution.

merci de m'aidé
tigerland est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2011, 06h58   #2
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.
Tout dépend de la nature de ta variable qui contient les dates : texte ou nombre ?
Code :
1
2
3
4
5
6
7
8
9
10
11
DATA work.tiger (DROP=annee quarter) ;
  DO annee=1986 TO 2010 ;
    DO quarter=1 TO 4 ;
	  texte=CATS(annee,"Q",quarter) ;
	  date=INPUT(texte,YYQ6.) ;
	  conso=ROUND(RAND("GAMMA",1000)) ;
	  OUTPUT ;
	END ;
  END ;
  FORMAT date YYQ7. ;
RUN ;
Tu peux avoir une variable texte "1986Q1" par exemple, et ce sera un peu compliqué. Parce que dans ce cas, tu dois énumérer dans ORDER toutes les valeurs que tu veux voir apparaître (bon, on peut l'automatiser avec un peu de langage macro) mais surtout, SAS ne représentera que ces points sur le graphique ! Donc si tu ne veux pas afficher tous les trimestres sur ton axe, tu n'auras pas non plus les points pour tous les trimestres sur ta courbe !
Code :
1
2
3
4
5
6
7
8
9
10
11
12
PROC SQL NOPRINT ;
  SELECT QUOTE(STRIP(texte)) INTO : listeDates SEPARATED BY " "
  FROM work.tiger
  WHERE texte LIKE '%Q1' OR texte LIKE '%Q4'
  ;
QUIT ;
AXIS1 ORDER=(&listeDates) ;
SYMBOL i=JOIN ;
PROC GPLOT DATA=work.tiger ;
  PLOT conso * texte / HAXIS=axis1 ;
RUN ; QUIT ;
GOPTION RESET=ALL ;
On collecte avec le SQL toutes les valeurs à afficher, on les stocke dans une macro-variable et on la réutilise dans l'AXIS1.

Mais il serait largement préférable d'avoir une vraie date SAS (donc une variable numérique) pour exprimer tes dates, parce que là, on va pouvoir agir proprement sur les marques de l'axe sans perdre des points.
Si tu as actuellement du texte, tu peux créer une variable DATE ainsi :
Code :
date=INPUT(UPCASE(texte),YYQ6.) ;
Tu verras alors des valeurs en nombres de jours depuis le 01/01/1960.
Avec le format, tu vas retrouver des valeurs affichées conformes à ce que contenait la variable texte.

Ensuite pour l'axe, c'est plus cool, tu écris
Code :
AXIS1 ORDER=("01jan1986"d TO "01jan2011"d BY YEAR) ;
et SAS affiche le 1er trimestre de chaque année. J'ai essayé de produire un graphique, je trouve que c'est encore chargé. Je te propose de ne montrer que les années paires :
Code :
AXIS1 ORDER=("01jan1986"d TO "01jan2012"d BY YEAR2.) ;
La suite du code, elle, est sans surprise :
Code :
1
2
3
4
5
SYMBOL i=JOIN ;
PROC GPLOT DATA=work.tiger ;
  PLOT conso * date / HAXIS=axis1 ;
RUN ; QUIT ;
GOPTION RESET=ALL ;
Bon courage.
Olivier
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/05/2011, 11h47   #3
Invité de passage
 
Homme
Étudiant
Inscription : mai 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 9
Points : 1
Points : 1
bonjour;

Effectivement mes dates sont aux format texte: voila ce que j'obtiens,
avec la proc contents variable= date type=Texte len= 6 format=$6 informat= $6.

je vais essayer de créer une variable date et je vous tiens au courant
merci.
tigerland est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2011, 12h10   #4
Invité de passage
 
Homme
Étudiant
Inscription : mai 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 9
Points : 1
Points : 1
Ca marche bien merci par contre sur ma table j'ai trois autre variables chômage PIB taux_court,quand je tape vos commande je perds dans ma table les trois autres variables, de plus les chiffres qui sont en colonnes conso ont changé de valeur. Pouvez-vous m'aider

Code :
1
2
3
4
5
6
7
8
9
10
11
DATA work.tiger (DROP=annee quarter) ;
  DO annee=1986 TO 2010 ;
    DO quarter=1 TO 4 ;
	  texte=CATS(annee,"Q",quarter) ;
	  date=INPUT(UPCASE(texte),YYQ6.) ;
	  conso=ROUND(RAND("GAMMA",1000)) ;
	  OUTPUT ;
	END ;
  END ;
  FORMAT date YYQ7. ;
RUN ;
tigerland est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2011, 12h20   #5
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 143
Points : 1 760
Points : 1 760
Rajoute un set de ta table après la ligne data. Attention à bien mettre des noms de variables différents.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
DATA work.tiger (DROP=annee quarter) ;
SET MATABLEAMOI;
  DO annee=1986 TO 2010 ;
    DO quarter=1 TO 4 ;
	  texte=CATS(annee,"Q",quarter) ;
	  date=INPUT(UPCASE(texte),YYQ6.) ;
	  conso=ROUND(RAND("GAMMA",1000)) ;
	  OUTPUT ;
	END ;
  END ;
  FORMAT date YYQ7. ;
RUN ;
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2011, 12h41   #6
Invité de passage
 
Homme
Étudiant
Inscription : mai 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 9
Points : 1
Points : 1
merci,
je suis vraiment nul mais j'ai bien mis set puis le nom de ma table,par contre il y a un problème avec YYQ7.
Citation:
The format $YYQ was not found or could not be loaded
voici ce que j'ai ecrit:
Code :
1
2
3
4
5
6
7
8
9
10
11
DATA save.base (DROP=annee quarter) ;
SET save.base;
DO annee=1986 TO 2010 ;
    DO quarter=1 TO 4 ;
      texte=CATS(annee,"q",quarter) ;
      date=INPUT(UPCASE(texte),YYQ6.) ;
      OUTPUT ;
    END ;
  END ;
  FORMAT date YYQ7. ;
RUN ;
save.base c'est l'endroit ou ce trouve ma base de donnée avec toutes les variables. est ce que c'est du au faite que ma table contiennent aussi la variables date en texte.
tigerland est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2011, 18h05   #7
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
L'étape DATA n'était là que pour générer un jeu d'essai !
Dans ton cas, comme tu as déjà des données il faudrait adapter :
Code :
1
2
3
4
5
DATA save.base  ;
SET save.base;
   date2=INPUT(UPCASE(date),YYQ6.) ;
   FORMAT date2 YYQ7. ;
RUN ;
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2011, 23h14   #8
Invité de passage
 
Homme
Étudiant
Inscription : mai 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 9
Points : 1
Points : 1
merci,
c'est bon j'ai réussi,je vais pouvoir continuer mon mémoire
tigerland 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 09h01.


 
 
 
 
Partenaires

Hébergement Web