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 04/05/2008, 16h45   #1
Candidat au titre de Membre du Club
 
Inscription : avril 2008
Messages : 18
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 18
Points : 10
Points : 10
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 :
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.
b.barry est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2008, 17h02   #2
Membre Expert
 
Inscription : mars 2005
Messages : 1 028
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 028
Points : 1 278
Points : 1 278
Envoyer un message via Yahoo à bahraoui
Bonjour,
Tu peux creer deux tables et les fusionner après.

Codialement.
bahraoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2008, 17h05   #3
Membre Expert
 
Inscription : mars 2005
Messages : 1 028
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 028
Points : 1 278
Points : 1 278
Envoyer un message via Yahoo à bahraoui
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 ">".
bahraoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2008, 17h14   #4
Candidat au titre de Membre du Club
 
Inscription : avril 2008
Messages : 18
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 18
Points : 10
Points : 10
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
b.barry est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2008, 19h01   #5
Candidat au titre de Membre du Club
 
Inscription : avril 2008
Messages : 18
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 18
Points : 10
Points : 10
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 :
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.
b.barry est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2008, 19h17   #6
Candidat au titre de Membre du Club
 
Inscription : avril 2008
Messages : 18
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 18
Points : 10
Points : 10
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.
b.barry est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2008, 11h37   #7
Membre chevronné
 
Avatar de steelspirit
 
Inscription : janvier 2008
Messages : 420
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2008
Messages : 420
Points : 739
Points : 739
Envoyer un message via MSN à steelspirit
je propose ça (a tester sur un petit échantillon) :

Code :
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;
steelspirit est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2008, 12h53   #8
Membre Expert
 
Inscription : mars 2005
Messages : 1 028
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 028
Points : 1 278
Points : 1 278
Envoyer un message via Yahoo à bahraoui
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 :
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 :
1
2
3
4
5
DATA tab;
SET tab1
 tab2
tab3;
run;
bahraoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2008, 16h53   #9
Candidat au titre de Membre du Club
 
Inscription : avril 2008
Messages : 18
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 18
Points : 10
Points : 10
Citation:
Envoyé par bahraoui Voir le message
Tu utilises un seul "set" pour empiler les tables.
Code :
1
2
3
4
5
DATA tab;
SET tab1
 tab2
tab3;
run;
Merci beaucoup. Ça marche!
b.barry 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 00h42.


 
 
 
 
Partenaires

Hébergement Web