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 05/09/2011, 20h17   #1
Invité régulier
 
Homme REMI
Étudiant
Inscription : juin 2011
Messages : 34
Détails du profil
Informations personnelles :
Nom : Homme REMI
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 34
Points : 7
Points : 7
Par défaut Somme de variables sur centiles

Bonsoir,

J'ai un soucis avec un code étant celui-ci :

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
 
proc means DATA=rentastock minimum P1 P5 P10 P25 median P75 P90 P95 P99 maximum; 
var PRODUCTION; 
 
DATA rentastock;
SET rentastock;
IF PRODUCTION => minimum AND PRODUCTION <= P1
	then CAT='1er centile';
IF PRODUCTION => P1 AND PRODUCTION <= P5
	then CAT='5e centile';
IF PRODUCTION => P5 AND PRODUCTION <= P10
	then CAT='10e centile';
IF PRODUCTION => P10 AND PRODUCTION <= P25
	then CAT='25e centile';
IF PRODUCTION => P25 AND PRODUCTION <= mean
	then CAT='2e quartile';
IF PRODUCTION => mean AND PRODUCTION <= P75
	then CAT='3e quartile';
IF PRODUCTION => P75 AND PRODUCTION <= P90
	then CAT='90e centile';
IF PRODUCTION => P90 AND PRODUCTION <= P95
	then CAT='95e centile';
IF PRODUCTION => P95 AND PRODUCTION <= P99
	then CAT='99e centile';
IF PRODUCTION => P99 AND PRODUCTION <= maximum
	then CAT='dernier centile';
run;
 
proc means DATA=rentastock sum; 
var PRODUCTION; 
class CAT;
run;
En fait je souhaite fait la somme de la variable Production mais en créant des classes qui sont en fait définies par des centiles: min P1 P5 P10 P25 mean P75 P90 P95 P99 max. Donc je crée les centiles avec une proc means ensuite je forme les groupes voulus et enfin je refais une somme sur ces mêmes catégories;;;
Seulement, en exécutant le code montré ci-dessus SAS m'affiche le message:

Code :
1
2
3
4
 
Variable P1 non initialisée
Variable P5 non initialisée
(ainsi de suite)
Any suggestion? je prends tout!

Merci!

Bonne soirée

REMI
mantus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2011, 21h01   #2
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 957
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 957
Points : 1 368
Points : 1 368
C'est pas aussi simple que ça Remi, voici comment tu dois procéder:


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
proc means DATA=sashelp.class  ; 
var weight; 
output out =rentastock(DROP=_type_ _freq_)P1 =p1 P5=P5 P10=P10 P25=P25 median=Median P75=P75 P90=P90 P95=P95 P99=P99 min=minimum max=maximum;
run;
 
DATA _null_;
SET rentastock;
call symput("P1",P1);
call symput("P5",P5);
call symput("P10",P10);
call symput("P25",P25);
call symput("Median",Median);
call symput("P75",P75);
call symput("P90",P90);
call symput("P95",P95);
call symput("P99",P99);
call symput("Minimum",Minimum);
call symput("Maximum",Maximum);
run; 
 
 
DATA stat;
SET sashelp.class;
IF Weight => &minimum AND Weight <= &P1
then CAT='1er centile';
RUN;
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2011, 23h46   #3
Invité régulier
 
Homme REMI
Étudiant
Inscription : juin 2011
Messages : 34
Détails du profil
Informations personnelles :
Nom : Homme REMI
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 34
Points : 7
Points : 7
Par défaut merci

Je te remercie.

Mais où se fait la somme sur chaque classe de centile/médiane?

remi
mantus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 07h47   #4
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 957
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 957
Points : 1 368
Points : 1 368
Il suffisait de finir le recodage de ta variable CAT que j'ai commencé puis appliquer la proc means sur cette table.
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
 
proc means DATA=rentastock ; 
var weight; 
output out =rentastock(DROP=_type_ _freq_)
P1 =p1 P5=P5 P10=P10 P25=P25 median=Median P75=P75 P90=P90 P95=P95 P99=P99 min=minimum max=maximum mean=mean;
run;
 
DATA _null_;
SET rentastock;
call symput("P1",P1);
call symput("P5",P5);
call symput("P10",P10);
call symput("P25",P25);
call symput("Median",Median);
call symput("P75",P75);
call symput("P90",P90);
call symput("P95",P95);
call symput("P99",P99);
call symput("Minimum",Minimum);
call symput("Maximum",Maximum);
call symput("Mean",Mean);
run; 
 
DATA rentastock;
SET rentastock;
IF PRODUCTION => &minimum AND PRODUCTION <= &P1
	then CAT='1er centile';
IF PRODUCTION => &P1 AND PRODUCTION <= &P5
	then CAT='5e centile';
IF PRODUCTION => &P5 AND PRODUCTION <= &P10
	then CAT='10e centile';
IF PRODUCTION => &P10 AND PRODUCTION <= &P25
	then CAT='25e centile';
IF PRODUCTION => &P25 AND PRODUCTION <= &mean
	then CAT='2e quartile';
IF PRODUCTION => &mean AND PRODUCTION <= &P75
	then CAT='3e quartile';
IF PRODUCTION => &P75 AND PRODUCTION <= &P90
	then CAT='90e centile';
IF PRODUCTION => &P90 AND PRODUCTION <= &P95
	then CAT='95e centile';
IF PRODUCTION => &P95 AND PRODUCTION <= &P99
	then CAT='99e centile';
IF PRODUCTION => &P99 AND PRODUCTION <= &maximum
	then CAT='dernier centile';
run;
 
 
 
proc means DATA=rentastock  ; 
var PRODUCTION; 
class CAT;
output out =rentastock_sortie(DROP=_type_ _freq_) sum=;
run;
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 09h34   #5
Invité régulier
 
Homme REMI
Étudiant
Inscription : juin 2011
Messages : 34
Détails du profil
Informations personnelles :
Nom : Homme REMI
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 34
Points : 7
Points : 7
Par défaut solution

Bonjour,

Merci, j'avais en effet inclus une nouvelle étape proc means sur les classes, mais l'output out manquait.

Cela fonctionne.

remi
mantus 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 17h18.


 
 
 
 
Partenaires

Hébergement Web