Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > Débutez
Débutez Forum concentrant les premières questions que l'on se pose en tant que débutant
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 03/10/2011, 18h09   #1
Invité de passage
 
Femme
Étudiant
Inscription : août 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : août 2011
Messages : 6
Points : 1
Points : 1
Par défaut Suppression de ligne entière

Bonjour,

J'ai besoin d'aide svp.

Voilà le problème:

J'ai 2 fichiers SAS. dans le premier fichier il y a 2 colonnes (nom d’ingrédients d'une ration de vaches et la catégorie (ex: fourrage, sous produits...))
le 2e fichier, il y a l'identification de l'animal et le nom d’ingrédients qui compose sa ration.

Je dois trouver le nombre d'animal qui consomme seulement du fourrage et des tourteaux.

Alors, j'ai fusionné les 2 fichiers puis j'ai programmé qu'on supprime les ingrédient dont le noms ne sont pas fourrage ou tourteaux.
Mais le problème, c'est que le numéro d'une vache pourrait se répéter plusieurs fois car elle mange plus qu'un ingrédient.

Si quelqu’un pourrait aider, merci d'avance
Farani est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2011, 18h50   #2
Membre éclairé
 
Homme
statisticien
Inscription : mai 2011
Messages : 212
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : statisticien
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : mai 2011
Messages : 212
Points : 319
Points : 319
Bonjour,
je pense que tu auras ta solution par deux requêtes imbriquées avec proc SQL

par exemple
Code :
1
2
3
4
5
6
7
 
proc sql; CREATE TABLE Selection
AS SELECT *
FROM TableVache
 
WHERE id_vache IN (SELECT id_vache FROM TableVache WHERE ration IN ('Tourteaux','Fourrage'))
;quit;
Tu conserveras alors toutes les lignes des vaches ayant consommé du Tourteau ou du fourrage y compris les lignes où elles ont consommé quleque chose d'autre.

Etait-ce ta question ?

Bon courage.
jerome_pdv2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2011, 21h37   #3
Invité de passage
 
Femme
Étudiant
Inscription : août 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : août 2011
Messages : 6
Points : 1
Points : 1
Merci.
J'ai essayé mais ça ne sort pas.
Je vais poser ma question d'une autre manière:
Comment je dois programmer si:
je dois savoir le nombre des vaches n'ayant pas dans leur ration les catégories A et B.
Sachant que la ration d'une vache est constitué de 10 ingrédients de catégories A à Z.
j'ai 3 colonnes: id_animal, id_ingrédient, catégories (A à Z)
Encore merci
Farani est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2011, 22h02   #4
Membre éclairé
 
Homme
statisticien
Inscription : mai 2011
Messages : 212
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : statisticien
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : mai 2011
Messages : 212
Points : 319
Points : 319
Bonsoir

de mon côté je n'ai pas de soucis le code marche, et dans ce dernier code la dernière SQL te donne le nombre d'animaux ayant eu au moins A ou B

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 
DATA TABLE;
id_animal='0001';id_ingredient='01';categorie='A';output;
id_animal='0001';id_ingredient='02';categorie='B';output;
id_animal='0001';id_ingredient='03';categorie='C';output;
id_animal='0002';id_ingredient='01';categorie='D';output;
id_animal='0002';id_ingredient='02';categorie='G';output;
id_animal='0002';id_ingredient='03';categorie='H';output;
id_animal='0002';id_ingredient='01';categorie='J';output;
id_animal='0003';id_ingredient='01';categorie='A';output;
id_animal='0003';id_ingredient='02';categorie='Z';output;
id_animal='0003';id_ingredient='03';categorie='W';output;
id_animal='0003';id_ingredient='04';categorie='H';output;
id_animal='0004';id_ingredient='01';categorie='M';output;
id_animal='0004';id_ingredient='02';categorie='N';output;
id_animal='0004';id_ingredient='03';categorie='B';output;
id_animal='0004';id_ingredient='04';categorie='Y';output;
id_animal='0005';id_ingredient='01';categorie='H';output;
id_animal='0005';id_ingredient='02';categorie='L';output;
id_animal='0005';id_ingredient='03';categorie='M';output;
id_animal='0005';id_ingredient='04';categorie='G';output;
run;
*  selection des rations des animaux ayant eu au moins A ou B;
proc sql; CREATE TABLE Selection
AS SELECT *
FROM TABLE
 
WHERE id_animal IN (SELECT id_animal FROM TABLE WHERE categorie IN ('A','B'))
;quit;
 
 
 
* compte les animaux ayant eu au moins A ou B;
proc sql; 
SELECT count(DISTINCT id_animal)
FROM TABLE
 
WHERE id_animal IN (SELECT id_animal FROM TABLE WHERE categorie IN ('A','B'))
;quit;
jerome_pdv2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2011, 09h05   #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
Dans ton programme Jérôme j'ai l'impression que tu sélectionnes tous les animaux qui ont mangé du fourrage ou du tourteau, mais pas exclusivement.
S'il s'agit d'un régime exclusivement composé de ces aliments, il faudrait peut-être raisonner à l'inverse :
prendre les identifiant animaux NOT IN (sous-requête sélectionnant les animaux qui ont mangé autre chose que du fourrage ou du tourteau).
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2011, 10h10   #6
Membre éclairé
 
Homme
statisticien
Inscription : mai 2011
Messages : 212
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : statisticien
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : mai 2011
Messages : 212
Points : 319
Points : 319
Salut Olivier ,

oui effectivement si on cherche seulement les bêtes consommant A et B effectivement on doit mettre (id_animal NOT IN (select id_animal from table where categorie NOT in ('A','B')) pour le test, autant pour moi

mais dans ce cas ce serait je pense plus propre de rajouter

from (select * where categorie in ('A','B'))

ce qui deviendrais

Code :
1
2
3
4
5
6
7
8
9
 
 
* compte les animaux ayant eu au moins A ou B;
proc sql; 
SELECT count(DISTINCT id_animal)
FROM (SELECT * FROM TABLE WHERE categorie IN ('A','B')) 
 
WHERE id_animal NOT IN (SELECT id_animal FROM TABLE WHERE categorie NOT IN ('A','B',''))
;quit;
jerome_pdv2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2011, 19h46   #7
Invité de passage
 
Femme
Étudiant
Inscription : août 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : août 2011
Messages : 6
Points : 1
Points : 1
Bonjour,

@Jérôme: ton programme c'est exclusivement A et B ou soit A soit B?

Merci
Farani est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/10/2011, 14h59   #8
Membre éclairé
 
Homme
statisticien
Inscription : mai 2011
Messages : 212
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : statisticien
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : mai 2011
Messages : 212
Points : 319
Points : 319
Bonjour


in ('A','B') = A ou B

in ('A','B',' ') = A ou B ou blanc

not in ('A','B',' ') = ni A et ni B et ni blanc

(cf règles du calcul booléen)
jerome_pdv2 est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h24.


 
 
 
 
Partenaires

Hébergement Web