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 01/08/2011, 10h13   #1
Invité de passage
 
Femme
Inscription : juillet 2011
Messages : 16
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : juillet 2011
Messages : 16
Points : 4
Points : 4
Par défaut Sélection d'observations à partir d'une valeur seuil

Bonjour à tous,
Voilà j'ai un problème au niveau de la programmation SAS : j'aimerais sélectionner les observations de ma table à partir d'un certain seuil.

Voila la table :


Code :
1
2
3
4
5
6
7
8
9
10
11
DATA test;
input a b;
cards; 
1 5
65 123
36 89
5  23
;
run;
proc print DATA=test;
run;

j'aimerais sélectionner les observations à partir de a=65 (i.e lorsque a est maximum) et en sachant que les données peuvent changer.


Pour cela j'ai crée une proc sql qui renvoie le max de a :

Code :
1
2
3
4
proc sql;
CREATE TABLE test1 AS
SELECT a, b, max(a) AS max_a FROM test;
SELECT * FROM test1;
Ensuite j'essaie d'éliminer les observations jusqu'à ce que a=max_a mais cela ne fonctionne pas

Code :
1
2
3
4
5
6
7
8
9
DATA test2;
SET simax;
do until (a=max_a);
IF (a<max_a) then DELETE;
keep a b max_a;
end;
run;
proc print DATA=test2;
run;
Comment puis-je faire ? Merci beaucoup !
patril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2011, 10h34   #2
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

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

Informations forums :
Inscription : février 2011
Messages : 1 006
Points : 1 703
Points : 1 703
hello;
quelque chose comme :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
DATA test;
input a b;
cards; 
1 5
65 123
36 89
5  23
;
run;
 
proc sql; 
CREATE TABLE tes1(DROP= max_a) AS SELECT *,max(a) AS max_a FROM test HAVING a=max_a;quit;
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2011, 11h08   #3
Invité de passage
 
Femme
Inscription : juillet 2011
Messages : 16
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : juillet 2011
Messages : 16
Points : 4
Points : 4
Par défaut problème

cela renvoie seulement l'observation pour laquelle a est maximum... ce que j'aimerai c'est qu'il renvoie aussi les suivantes (observation 3 + 4)...
patril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2011, 11h21   #4
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

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

Informations forums :
Inscription : février 2011
Messages : 1 006
Points : 1 703
Points : 1 703
oui c'est logique , la fonction max renvoi le maximum d'une valeur. ici c'est le maximum de a.
ton seuil tu le récupère d'où?
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2011, 11h32   #5
Rédacteur
 
Homme Stéphane
Consultant et formateur SAS et Cognos
Inscription : avril 2009
Messages : 1 791
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Consultant et formateur SAS et Cognos
Secteur : Conseil

Informations forums :
Inscription : avril 2009
Messages : 1 791
Points : 4 012
Points : 4 012
ll faut te focaliser sur le numéro de l'observation

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
DATA test;
input a b;
cards; 
1 5
65 123
36 89
5  23
;
run;
 
proc sql;
CREATE TABLE test1 AS
SELECT a, b, max(a) AS max_a
FROM test;
quit;
DATA _null_;
SET test1;
IF (a=max_a) then call symputx('debut',_n_);
run;
 
 
DATA test2;
SET test1 (firstobs=&debut);
run;
__________________
N'oubliez pas de cliquer sur lorsque votre problème est réglé !

Moteur de recherche dans les papiers SAS
datametric est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/08/2011, 13h29   #6
Invité de passage
 
Femme
Inscription : juillet 2011
Messages : 16
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : juillet 2011
Messages : 16
Points : 4
Points : 4
Par défaut réponse

merci beaucoup datametric ! et si je veux récupérer les premières observations dans un tableau, la commande "last.obs" existe-t-elle ?

Code :
1
2
3
DATA test2;
SET test1 (lastobs=&debut);
run;
s.a.m : le seuil correspond à l'observation où a=max(a)
patril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2011, 14h03   #7
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

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

Informations forums :
Inscription : février 2011
Messages : 1 006
Points : 1 703
Points : 1 703
ok ,j'ai compris.
pour ta deuxième question l'option s'appel OBS=
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2011, 14h11   #8
Rédacteur
 
Homme Stéphane
Consultant et formateur SAS et Cognos
Inscription : avril 2009
Messages : 1 791
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Consultant et formateur SAS et Cognos
Secteur : Conseil

Informations forums :
Inscription : avril 2009
Messages : 1 791
Points : 4 012
Points : 4 012
Effectivement avec OBS= à la place de firstobs il s'arrêtera à la ligne considérée
__________________
N'oubliez pas de cliquer sur lorsque votre problème est réglé !

Moteur de recherche dans les papiers SAS
datametric est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2011, 15h41   #9
Invité de passage
 
Femme
Inscription : juillet 2011
Messages : 16
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : juillet 2011
Messages : 16
Points : 4
Points : 4
Par défaut réponse

Merci beaucoup pour vos réponses !! Cela fonctionne très bien !
patril 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 13h43.


 
 
 
 
Partenaires

Hébergement Web