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 :

Compter et grouper des observations


Sujet :

SAS Base

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2008
    Messages : 20
    Points : 24
    Points
    24
    Par défaut Compter et grouper des observations
    Bonjour à tous,
    Je sollicite à nouveau votre aide pour ce problème ci:
    Ci-dessous un extrait de ma table qui contient en realié 52000 observations.

    id stg stgsem

    0001 WI 8
    0002 WI 12
    0003 AI 7
    0005 WI 8
    0006 TI 10
    0007 MI 6
    0008 MI 7
    0009 AI 9
    0010 WI 9

    Mon problème est de trouver le nombre d'individus de la colonne id qui repondent à des
    critères dépendant de la colonne stg et de la colonne stgsem, notamment:
    si la valeur de stg est "WI" ou "TI" ou "AI" alors je dois compter le nombre d'observations
    de la colonne id dont la valeur correspondante à la colonne stgsem est inferieure ou égal à 8 puis les grouper
    par la colonne stg.
    Si par contre la valeur observée à stg est "MI", dans ce cas je dois trouver le nombre
    d'individus de la colonne id ayant un stgsem inferieur ou égal à 6 et les grouper aussi par la colonne stg.
    Si je n'avais qu'un seul cas, le premier par exemple, la solution m'aurait été facile grâce à ce proc sql;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    proc sql;
    create table table2 as select id, stg, stgsem, count(*) as nombre
    from table1
    where stgsem>8
    group by stg
    quit;
    Mais les deux cas pour une même table de sortie me rendent
    J'ai vous remercie d'avance pour votre gentil coup de pousse.

  2. #2
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    Bonjour,
    Tu peux creer deux tables et les fusionner après.

    Codialement.
    Consultez les FAQs et les anciens postes avant de poser vos questions. Merci

  3. #3
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    Citation Envoyé par b.barry Voir le message
    Bonjour à tous,
    Je sollicite à nouveau votre aide pour ce problème ci:
    Ci-dessous un extrait de ma table qui contient en realié 52000 observations.

    id stg stgsem

    0001 WI 8
    0002 WI 12
    0003 AI 7
    0005 WI 8
    0006 TI 10
    0007 MI 6
    0008 MI 7
    0009 AI 9
    0010 WI 9

    Mon problème est de trouver le nombre d'individus de la colonne id qui repondent à des
    critères dépendant de la colonne stg et de la colonne stgsem, notamment:
    si la valeur de stg est "WI" ou "TI" ou "AI" alors je dois compter le nombre d'observations
    de la colonne id dont la valeur correspondante à la colonne stgsem est inferieure ou égal à 8 puis les grouper
    par la colonne stg.
    Si par contre la valeur observée à stg est "MI", dans ce cas je dois trouver le nombre
    d'individus de la colonne id ayant un stgsem inferieur ou égal à 6 et les grouper aussi par la colonne stg.
    Si je n'avais qu'un seul cas, le premier par exemple, la solution m'aurait été facile grâce à ce proc sql;

    proc sql;
    create table table2 as select id, stg, stgsem, count(*) as nombre
    from table1
    where stgsem>8
    group by stg
    quit;

    Mais les deux cas pour une même table de sortie me rendent
    J'ai vous remercie d'avance pour votre gentil coup de pousse.

    Tu dis que stgsem doit etre "inferieure ou égal à 8" alors que que dans le code tu *utilises le signe ">".
    Consultez les FAQs et les anciens postes avant de poser vos questions. Merci

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2008
    Messages : 20
    Points : 24
    Points
    24
    Par défaut
    Oui tu as raison pour le signe. c'a m'a échapé. Ca devait être "<=".
    Mais pour les deux tables et la fusion, est-ce possible quand les id sont differents dans les deux tables?

    Merci

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2008
    Messages : 20
    Points : 24
    Points
    24
    Par défaut
    Salut Bahraoui,
    J'ai utilisé ta méthode mais ca n'a malheureusement pas marché. Au finish j'ai eu 3 tables.

    tab1 contient 93 observations
    tab2 17
    tab3 25
    En les fusionnant j'ai eu une table de seulement 17 observations! Cequi est invraisemblable

    voici comment j'ai procedé pour la fusion:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    data tab;
    set tab1;
    set tab2;
    set tab3;
    run;
    Les trois tables ont évidamment les mêmes variables. Seulement, dans la selection, il a dû supprimer des observations. De la première table il n'a pris par exemple que 18 0bservations sur les 93. Je suis perplexe.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2008
    Messages : 20
    Points : 24
    Points
    24
    Par défaut
    En les triants par la colonne id et en les fusionnant avec merge par la suite j'ai obtenu 129 Observations, biequ'au niveau du tri aucune ligne double n'a été observée, donc logiquement je devais avoir 135(93+17+25) observations pour les trois tables.

  7. #7
    Membre éprouvé
    Avatar de steelspirit
    Homme Profil pro
    SAS discute
    Inscrit en
    Janvier 2008
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SAS discute
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 472
    Points : 916
    Points
    916
    Par défaut
    je propose ça (a tester sur un petit échantillon) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    proc sql;
       create table table2 as
       select stg, count(id)
       from table1
       where (stg in ('WI','TI','AI') and stgsem <= 8)
           OR (stg='MI' and stgsem <= 6)
       group by stg;
    quit;
    Avant de poser votre question, n'oubliez pas :
    FAQ, SAS DOC et de ce forum

  8. #8
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    Citation Envoyé par b.barry Voir le message
    Salut Bahraoui,
    J'ai utilisé ta méthode mais ca n'a malheureusement pas marché. Au finish j'ai eu 3 tables.

    tab1 contient 93 observations
    tab2 17
    tab3 25
    En les fusionnant j'ai eu une table de seulement 17 observations! Cequi est invraisemblable

    voici comment j'ai procedé pour la fusion:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    data tab;
    set tab1;
    set tab2;
    set tab3;
    run;
    Les trois tables ont évidamment les mêmes variables. Seulement, dans la selection, il a dû supprimer des observations. De la première table il n'a pris par exemple que 18 0bservations sur les 93. Je suis perplexe.
    Tu utilises un seul "set" pour empiler les tables.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    data tab;
    set tab1
     tab2
    tab3;
    run;
    Consultez les FAQs et les anciens postes avant de poser vos questions. Merci

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2008
    Messages : 20
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par bahraoui Voir le message
    Tu utilises un seul "set" pour empiler les tables.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    data tab;
    set tab1
     tab2
    tab3;
    run;
    Merci beaucoup. Ça marche!

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

Discussions similaires

  1. Compter des observations à l'aide du SQL de SAS
    Par lahli57 dans le forum Débutez
    Réponses: 8
    Dernier message: 08/05/2011, 14h44
  2. [CR] Grouper des minutes par cinq et non une par une.
    Par Etienne51 dans le forum SAP Crystal Reports
    Réponses: 6
    Dernier message: 14/09/2004, 13h45
  3. [CR8.5] Grouper des subreports ensembles
    Par liberio dans le forum SAP Crystal Reports
    Réponses: 8
    Dernier message: 08/06/2004, 01h44
  4. [CR]grouper des dates par semaines, mais semaines FR !
    Par neo.51 dans le forum SAP Crystal Reports
    Réponses: 11
    Dernier message: 18/05/2004, 20h43
  5. [CR] Grouper des sections de détail?
    Par rodrigue50 dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 06/06/2003, 14h32

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