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/12/2010, 11h02   #1
Candidat au titre de Membre du Club
 
Inscription : avril 2006
Messages : 90
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 90
Points : 13
Points : 13
Par défaut Supprimer tout une série

Bonjour,

J'aurais une petite question :

J'ai l tableau suivant :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
Elève	Note	Date
x1	>10	datew1
x1	<10	datew2
x1	<10	datew3
x1	<10	datew4
x2	>10	datex1
x2	>10	datex2
x2	<10	datex3
x2	>10	datex4
x3	<10	datey1
x3	<10	datey2
x3	>10	datey3
x4	<10	datz1
x4	<10	datz2
x4	>10	datz3
x4	<10	datz4
x4	<10	datz5
J'aimerais pouvoir garder uniquement les élèves dont la date la plus récente est "<10" et ainsi obtenir le tableau suivant :
Code :
1
2
3
4
5
6
7
8
9
10
11
 
Elève	Note	Date
x1	>10	datew1
x1	<10	datew2
x1	<10	datew3
x1	<10	datew4
x4	<10	datz1
x4	<10	datz2
x4	>10	datz3
x4	<10	datz4
x4	<10	datz5
Les élèves x2 et x3 ont été supprimés, du fait que leurs dates de notation les plus récentes (respectivement datex4 et datey3) correspondaient à des notes ">10".

Merci d'avance pour votre aide
tibss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2010, 11h31   #2
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 138
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 138
Points : 1 751
Points : 1 751
tu t'en es pas sorti avec ton problème d'hier finalement?

voila une solution pour ce problème... ca doit convenir pour celui d'aujourd'hui aussi

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
DATA test;
input eleve $ note $ date mesure ; 
informat date ddmmyy10.;
format date ddmmyy10.;
cards; 
x1 <10 20/03/2006 1
x1 >10 20/07/2007 2
x1 >10 20/08/2007 3
x1 <10 18/09/2008 4
x1 <10 20/03/2009 5
x2 <10 20/03/2006 1
x2 >10 20/07/2007 2
x2 >10 20/08/2007 3
x2 <10 18/09/2008 4
x2 >10 20/03/2009 5
x3 <10 20/03/2006 1
x3 >10 20/07/2007 2
x3 >10 20/08/2007 3
x3 >10 18/09/2008 4
x3 <10 20/03/2009 5
;
run;
 
proc sql;
CREATE TABLE test2(WHERE=(mesure>meas2)) AS
SELECT A.*, max(B.mesure) AS meas2
FROM test AS A full JOIN test(WHERE=(note IN (">10"))) AS b
ON a.eleve=b.eleve AND a.mesure=b.mesure
GROUP BY a.eleve
ORDER BY a.eleve, a.mesure
;
quit;
 
DATA test3(DROP=meas2);
SET test2;
BY eleve;
IF first.eleve;
run;
Manoutz est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2010, 11h46   #3
Candidat au titre de Membre du Club
 
Inscription : avril 2006
Messages : 90
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 90
Points : 13
Points : 13
Merci manoutz !
Oui, j'ai réussi à corriger mon petit bugg, il était principalement dû à ma variable d'incrémentation mal définie, et j'avais oublié un %EVAL lorsque j'effectuais l'addition entre une variable et un chiffre...

Je te remercie pour ton aide, je n'avais pas pensé à faire un proc SQL avec jointure...

Je te remercie pour ton aide une fois de plus ! Je vais tester tout ça !

A bientôt
tibss 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 11h14.


 
 
 
 
Partenaires

Hébergement Web