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 28/09/2011, 11h56   #1
Invité régulier
 
Femme
economiste
Inscription : juillet 2011
Messages : 14
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : economiste
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : juillet 2011
Messages : 14
Points : 9
Points : 9
Par défaut Condition IF: Création de groupes, de classes

Bonjour,

Je vais tenter de reposer ma question récente d'une autre façon car personne n'y a répondu.

J'ai une variable prenant une valeur différente pour chaque observation.
Je cherche à regrouper cette variable suivant des intervalles réguliers;

J'ai procédé comme suit:
Code :
1
2
3
4
5
DATA base;
SET base;
IF mavariable<-200000 then do;code=0;end;
IF (mavariable>=-200000 AND mavariable<-150000) then do; code=1;end;
etc....
j'ai besoin d'au moins 40 codes différents réprésetant des intervalles réguliers de 1000.
Comment éviter d'écrire toutes ces lignes svp?existe-t-il une otion me permettant de déterminer un pas de 1000?

Merci d'avance.
Cloaq est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 13h06   #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

Pour faire des classes plusieurs possibilités s'offrent à toi.

Si tu veux des classes de même taille en terme de nombre d'observations tu peux récupérer les percentiles de ta distribution via une proc summary (ou means) par exemple...

Si tu souhaite des classes de même étendue tu peux utiliser les fonctions de coupure ou d'arrondissement.

Par exemple en définissant ta classe comme une fonction de ta variable

Classe=F(Var) avec F(x)=FLOOR(x/1000) ou F(x)=ROUND(x/1000,0)
et bien d'autres fonctions possibles encore.

Il est recommandé de bien étudier la distribution de la variable avant de définir des classes, par exemple avec la proc univariate.

Edit :

Dans ton cas particulier ce serait plutôt sans IF mais avec une fonction bien choisi comme expliquée au dessus , par exemple

Classe=Max(0,4+floor(VarNum/50000));
jerome_pdv2 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/09/2011, 14h45   #3
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
Il y a peut-être mieux mais si tu dois appliquer des classes à énormément de variables, un FORMAT pourrait être utile. La table en entrée est facilement personnalisable au niveau des seuils, c'est peut-être plus pratique que des boucle DO ... BY dans ton étape DATA directement.


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
/*Création des classes et des seuils*/
DATA mesclasses;
do start=-10000 TO 1000 BY 1000;
end=start+1000;
label++1;
fmtname="classes";
type="n";
output;
end;
run;
 
/*Enregistrement en tant que FORMAT*/
proc format cntlin=mesclasses;
run;
 
/*Table de test*/
DATA test;
input mavar mavar2;
datalines;
-2000 52
-1500 -1000
-1000 60
-750 -4000
0 999
250 250
999 8
;
run;
 
/*Application du format*/
DATA test;
SET test;
maclasse = put(mavar, classes.);
maclasse2 = put(mavar2, classes.);
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 28/09/2011, 14h59   #4
Invité régulier
 
Femme
economiste
Inscription : juillet 2011
Messages : 14
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : economiste
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : juillet 2011
Messages : 14
Points : 9
Points : 9
Par défaut Merci

C'est tout à fait ce que je cherchais.
J'utilise la fonction floor uniquement car j'ai besoin de codes négatifs.
Merci beaucoup.

je vais explorer la seconde idée aussi
Cloaq est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2011, 10h09   #5
Invité régulier
 
Femme
economiste
Inscription : juillet 2011
Messages : 14
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : economiste
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : juillet 2011
Messages : 14
Points : 9
Points : 9
la seconde otion est tres interesante dans mon cas également.
merci beaucoup à vous deux, je vais gagner un temps précieux.
Cloaq
Cloaq 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 23h10.


 
 
 
 
Partenaires

Hébergement Web