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 02/11/2011, 14h42   #1
Invité de passage
 
Homme
Chargé d'études statistiques
Inscription : novembre 2011
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Chargé d'études statistiques
Secteur : Services de proximité

Informations forums :
Inscription : novembre 2011
Messages : 5
Points : 1
Points : 1
Par défaut nombre de dossiers par année

Bonjour,

J'aurai besoin d'un peit coup de main pour une étude que je suis en train de mener sous SAS. J'ai un fichier qui se compose en gros de la façon suivante :

CLIENT FORMULE ANNEE Nb_DOS ....
ATP ADC 2008 400
CIR DAC 2008 196
CIR DAC 2009 210
CIR DAC 2010 189
....

J'aimerai qu'au final ma table soit organisée de cette façon avec des nombre de dossiers par année, sur les 3 années concernées:

CLIENT FORMULE Nb_DOS_2008 Nb_DOS_2009 Nb_DOS_2010
ATP ADC 400 0 0
CIR DAC 196 210 189
...

J'ai essayé avec une proc transpose mais pour chaque client, il n'y a pas forcément de nombre de dossiers chaque année (comme pour ATP ou il n'y a des dossiers qu''en 2008).

Avec un data set classique j'ai résussi a obtenir un résultat ressemblant à ce que je veux mais je me retrouve avec une ligne par année et des résultats vides pour les autres années :

CLIENT FORMULE Nb_DOS_2008 Nb_DOS_2009 Nb_DOS_2010
CIR DAC 196 . .
CIR DAC . 210 .
CIR DAC . . 189

Hors je voudrai n'avoir qu'une ligne par client!!

Je n'ai pas utilisé SAS depuis quelque temps maintenant et je me retrouve coincé alors que cette manipulation ne me semble pas difficile pourtant.

Merci d'avance poour votre aide

(j'espère avoir été assez clair dans mes explications)
pix33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2011, 14h59   #2
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 012
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 012
Points : 1 713
Points : 1 713
Hello;
une proc TRANSPOSE. !!! et une concatination de variable.
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2011, 15h15   #3
Invité de passage
 
Homme
Chargé d'études statistiques
Inscription : novembre 2011
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Chargé d'études statistiques
Secteur : Services de proximité

Informations forums :
Inscription : novembre 2011
Messages : 5
Points : 1
Points : 1
Avec la proc transpose je vais avoir une table en sortant qui ressemblera a ca

CLIENT FORMULE Nb_doss COL1 COL2 COL3
ATP ADC 400 2008
CIR DAC 196 2008
CIR DAC 210 2009
CIR DAC 189 2010


Et si j'ai un client qui n'a par exemple des dossiers que pour l'année 2011, l'année 2011 apparaitra dans COL1 et non COL3
pix33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2011, 15h24   #4
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 828
Points : 2 828
Effectivement, soit tu prépares ta proc TRANSPOSE en construisant à l'avance les noms des variables avec une concaténation, puis tu repasses sur le résultat pour remplacer (si tu le souhaites) les valeurs manquantes par des zéros.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
DATA work.pix33 ;
  INPUT CLIENT $ FORMULE $ ANNEE Nb_DOS ;
DATALINES ;
ATP ADC 2008 400
CIR DAC 2008 196
CIR DAC 2009 210
CIR DAC 2010 189
;
RUN ;
DATA work.pix33 ;
  SET work.pix33 ;
  nomVar = CATX("_","nbDos",annee) ;
RUN ;
PROC TRANSPOSE DATA=work.pix33 OUT=work.nb ;
  BY client formule ;
  ID nomVar ;
  VAR Nb_DOS ;
RUN ;
DATA work.nb ;
  SET work.nb (DROP=_name_);
  ARRAY nb nbDos: ;
  DO OVER nb ;
    IF MISSING(nb) THEN nb=0 ;
  END ;
RUN ;
Sinon, avec la 2e forme de données que tu obtiens, avec une observation par client/formule/année, tu peux finir le travail avec une proc MEANS qui somme par client/formule les valeurs de toutes tes variables Nb_DOS_2008 Nb_DOS_2009 Nb_DOS_2010.

Bon courage.
Olivier
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2011, 15h38   #5
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 828
Points : 2 828
Sinon on peut aussi tout faire en une seule étape avec un ARRAY. Il est alors important de bien maîtriser l'année la plus ancienne.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
DATA work.pix33 ;
  INPUT CLIENT $ FORMULE $ ANNEE Nb_DOS ;
DATALINES ;
ATP ADC 2008 400
CIR DAC 2008 196
CIR DAC 2009 210
CIR DAC 2010 189
;
RUN ;
DATA work.nb (DROP=annee nb_dos) ;
  ARRAY nb nbDos_2008-nbDos_2011 (4*0) ;
  DO UNTIL(LAST.formule) ;
    SET work.pix33 ;
	BY client formule ;
	nb{annee-2007}=Nb_DOS ;
  END ;
RUN ;
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2011, 15h53   #6
Invité de passage
 
Homme
Chargé d'études statistiques
Inscription : novembre 2011
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Chargé d'études statistiques
Secteur : Services de proximité

Informations forums :
Inscription : novembre 2011
Messages : 5
Points : 1
Points : 1
Merci beaucoup olivier pour ta réponse et ta réactivité.

Je viens de tester la 1ère méthode qui fonctionne a merveille!!

Je n'avais pas pensé a faire une concaténation de variable avant ma transposée!!

Je m'y remets doucement, ça va venir.

Ce forum est génial en tout cas.

Merci encore.

Je vais tester avec un arry aussi, car c'est une façon de programmer que je n'utilisais pas souvent.
pix33 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 12h47.


 
 
 
 
Partenaires

Hébergement Web