Annonce

Bienvenue sur le site support des ouvrages :
SAS - Introduction au décisionnel : méthode et maîtrise du langage
(1ère édition - épuisée)
SAS - Introduction pratique : du data management au reporting (2ème édition - épuisée)
SAS - Introduction au décisionnel : du data management au reporting (3ème édition - épuisée (hélas...))

la réponse à la question "mais où trouver la 3ème édition ?" est précisée ici


Retrouvez dans ce tiré à part, la préface écrite par Mouloud Dey, Directeur Business solutions et marchés émergents, SAS France,
l’introduction générale ainsi que le plan complet de l’ouvrage

#1 03-05-2017 07:24:02

SAS-SR
Administrateur
Lieu: Université d'Orléans
Date d'inscription: 01-09-2008
Site web

[archives] Et si on windsorisait (avec SAS) ?

près quelques absences... le retour des beaux mercredis...

Il y a quelques temps, je suis tombé sur ce post sur le blog de Rick Winklin.

Le titre vous dit tout : Winsorization: The good, the bad, and the ugly

En résumé, il y a windsorisation et windsorisation et Rick Winklin vous dit qu’une “vraie” windsorisation consiste à remplacer les k valeurs les plus faibles par la k+1ème valeur la plus faible et les k valeurs les plus élevées par la N-k-1ème valeur la plus élevée. La windsorisation est symètrique (autant de valeurs remplacées de chaque côté de la distribution), elle n’est pas basée sur les quantiles et n’a pas pour objet de remplacer les valeurs manquantes.

Imaginons que vous avez une variable qui prend les valeurs suivantes :
-5 -4 -3 -2 -1 0 1 2 3 4 5
Et que vous voulez (pour des raisons qui vous appartiennent…) la windsoriser à l’ordre 2.

Vous devez alors obtenir :
-3 -3 -3 -2-1 0 1 2 3 3 3

Rick Winklin vous indique ensuite qu’il a rédigé un programme en IML qui windsorise « proprement ».

Et si vous rédigiez un macro-programme non pas en IML mais en langage base qui windsorise lui aussi « proprement » ?

Voici la table que vous allez utiliser pour tester votre macro-programme :

Code:

data test (drop=i j);
   call streaminit(12345);
   array x(10);
   do i=1 to 100;
      do j=1 to 10;
         x(j)=rand('normal')*50;
      end;
      output;
   end;
run;

Votre macro-programme devra avoir quatre paramètres :
-    La table d’entrée
-    Le nom de la table de sortie
-    La liste des variables à windsoriser (X1 X2 X7 par exemple)
-    Et la valeur de k, l’ordre de la windsorisation.

Votre macro-programme devra bien entendu être efficace !

Il devra surtout faire les choses correctement... (ce qui n'est pas le cas de mon programme à l'heure où j'écris ces lignes...)

Pour l'instant, mon programme ne contient pas de boucle macro, mobilise une PROC (une seule mais je ne vous dis pas laquelle), une DATA _NULL_ puis l’étape DATA qui crée la table de sortie dans laquelle vous observerez toutes les variables de la table TEST : les variables windsorisées et les autres.

mais le traitement n'est pas correct dans le cas où il y a répétition des valeurs extrêmes...

Prenons un exemple de traitement non correct :

soit la variable X qui prend les valeurs suivantes :
-5 -3 -3 -2 -1 0 1 2 3 4 5

Correctement windsorisée à l'ordre 3,  cette variable doit prendre les valeurs :

-2 -2 -2 -2 -1 0 1 2 2 2 2

puisqu'il faut remplacer les 3 valeurs les plus faibles par la 4ème valeur la plus faible soit -2 (ici, vous devez comprendre que la 4ème valeur la plus faible est observée en quatrième position lorsque les valeurs sont classées dans un ordre croissant).

Personnellement, j'obtiens pour l'instant :
-2 -3 -2 -2 -1 0 1 2 2 2 2

ce qui est, évidemment, faux... on a donc un problème pour l'instant lorsque les valeurs extrêmes sont répétées. Ce n'est pas le cas dans la table TEST que je vous propose d'utiliser mais il faudra que je réfléchisse à une solution...

Je vous laisse penser à tout ça...

Amusez-vous bien !

Ce sujet est maintenant archivé - seuls les utilisateurs inscrits de www.sas-sr.com peuvent consulter l'intégralité du sujet et les réponses aux questions posées.
pour vous identifier, suivez ce lien
pour vous inscrire, suivez ce lien

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB
Traduction par FluxBB.fr
Flux RSS