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 25-10-2017 11:37:47

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

Je compte mes références

Encore un sujet (presque) facile cette semaine :

Le programme suivant crée la table dont nous allons avoir besoin :

Code:

data test;
input ref $  ;
X=int(rand("uniform")*25);
cards;
A
A
A
A
A
A
B
B
B
B
C
C
C
C
C
;

J'obtiens (mais vous allez obtenir d'autres valeurs pour X puisque en l'absence de la routine CALL STREAMINIT, la séquence de nombre aléatoire n'est pas reproductible)
http://www.sas-sr.com/img/compteref1.png

1- Votre objectif est de construire une table dans laquelle on va compter le nombre de fois ou chaque référence apparaît et qui prendra la forme suivante :
http://www.sas-sr.com/img/compteref3.png

Une seule étape DATA suffit...

2- et lorsque vous vous serez bien échauffé avec la question n°1, vous construirez la table suivante dans laquelle le nombre de références est présenté "avant
http://www.sas-sr.com/img/compteref2.png

Evidemment, si vous avez compris le fonctionnement de SAS, vous savez déjà que pour répondre à la seconde question, une seule étape DATA ne suffira pas...


Ne spoilez pas ce sujet des beaux mercredis en postant votre réponse dans le forum de discussions, envoyez moi un mail ;-)

à la semaine prochaine

Hors ligne

 

#2 17-11-2017 09:52:16

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

Re: Je compte mes références

Je sais…. Aujourd’hui, c’est vendredi… mais je suis en retard…

Concluons ce sujet des beaux mercredis.

Le premier résultat demandé peut être obtenu au moyen de l’étape DATA suivante :

Code:

data test2(drop=temp);
   set test;
   by ref;
   if first.ref=1 then temp=1;
   else temp+1;
   output ;
   if last.ref then do ;
      nbref=temp;
      call missing(x);
      output ;
   end;
run;

Pour compter le nombre de fois où chaque référence est citée, nous allons déjà profiter du fait que notre table est triée par modalité de REF. Nous construisons une variable temporaire TEMP égale à 1 lorsqu’on examine pour la première fois une certain référence et qui augmente de 1 dans le cas contraire.

Ce n’est que lorsque l’on examine l’observation pour laquelle une référence donnée est citée pour la dernière fois que l’on est capable de savoir combien de fois une référence donnée est citée.

Cependant, au moyen de cette observation particulière, il nous faut construire deux observations :

Une première qui reprend la modalité de REF et la valeur de X pour cette modalité de REF. Une seconde qui reprendra aussi la valeur de REF, pour laquelle X sera valeur manquante et qui nous donnera le nombre de fois où cette référence est citée.

Cette dernière observation est construite au moyen de cet extrait du programme :

Code:

   if last.ref then do ;
      nbref=temp;
      call missing(x);
      output ;
   end;

Il nous faut aussi ajouter une autre instruction OUTPUT juste avant l’extrait du programme reproduit ici puisque, sans cette autre instruction OUTPUT, vous n’aurez que trois observations.

Et vous obtenez le premier résultat souhaité

Passons au second résultat… et modifions légèrement notre premier programme :

Code:

data test3(drop=temp);
   set test;
   by ref;
   n+1;
   if first.ref=1 then temp=1;
   else temp+1;
   output ;
   if last.ref then do ;
      nbref=temp;
      call missing(x);
      output ;
   end;
run;

Très légère modification… puisqu’une seule instruction a été ajoutée : n+1

Un simple PROC SORT nous permettra d’obtenir la table souhaitée :

Code:

proc sort data=test3 out=test4(drop=n);
   by ref descending nbref n ;
run;

Je vous laisse y réfléchir ;-)

Ce sujet est maintenant terminé, à bientôt pour un nouveau sujet des beaux mercredis

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB
Traduction par FluxBB.fr
Flux RSS