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 :

nombre de dossiers par année


Sujet :

SAS Base

  1. #1
    Membre à l'essai
    Homme Profil pro
    Chargé d'études statistiques
    Inscrit en
    Novembre 2011
    Messages
    23
    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 : 23
    Points : 15
    Points
    15
    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)

  2. #2
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Février 2011
    Messages : 1 625
    Points : 3 403
    Points
    3 403
    Par défaut
    Hello;
    une proc TRANSPOSE. !!! et une concatination de variable.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Chargé d'études statistiques
    Inscrit en
    Novembre 2011
    Messages
    23
    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 : 23
    Points : 15
    Points
    15
    Par défaut
    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

  4. #4
    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 : 47
    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
    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 : 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
    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

  5. #5
    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 : 47
    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
    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 : 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
    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 ;

  6. #6
    Membre à l'essai
    Homme Profil pro
    Chargé d'études statistiques
    Inscrit en
    Novembre 2011
    Messages
    23
    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 : 23
    Points : 15
    Points
    15
    Par défaut
    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.

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

Discussions similaires

  1. [MCD] Nombre d'heures travaillées par mois par année par compte
    Par Tidus159 dans le forum Schéma
    Réponses: 9
    Dernier message: 11/03/2011, 12h20
  2. compter nombre de dossiers par mois?
    Par Ouggada dans le forum Windows Forms
    Réponses: 17
    Dernier message: 27/02/2009, 10h40
  3. Nombre de dossiers et sous dossier géré par linux
    Par frog974 dans le forum Administration système
    Réponses: 4
    Dernier message: 05/09/2007, 10h08
  4. [MySQL] Nombre d'articles par année
    Par Topheur dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 11/05/2007, 09h35
  5. Réponses: 4
    Dernier message: 27/11/2006, 23h24

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