Annonce

Bienvenue sur le site support de mes ouvrages d'introduction à SAS

La 4ème édition de mon ouvrage est toujours disponible !

Où trouver cet ouvrage ?


#1 10-06-2015 12:52:11

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

[archive] Apprenons en un peu plus sur l’opérateur IN

Vous employez sûrement souvent l’opérateur IN sous la forme suivante :

Code:

IF x IN(1,2,3) THEN…

Mais depuis SAS 9, vous avez aussi la possibilité, si on en croit mon ouvrage, de préciser des intervalles sous la forme :

Code:

IF x IN(v1:v2) THEN…

L’objet de ce sujet des beaux mercredis va être de préciser exactement ce qui se passe lorsque vous utilisez des « intervalles » sous la forme V1:V2 et nous verrons que le terme intervalle n’est pas exact… (à la suite de ce sujet, je devrai donc rajouter un post à la section erratum de la 3ème édition…).

Construisons une première table :

Code:

DATA test(DROP=i) ;
CALL STREAMINIT(1234) ;
   DO i=1 TO 100 ;
      x=ROUND(RAND('uniform')*100,0.1) ;
      OUTPUT ;
   END ;
RUN ;

Nous disposons à ce stade d’une table d’une table de 100 observations. La variable X est comprise entre 0 et 100. Nous souhaitons construire une autre table dans laquelle sera présente une indicatrice valant 1 si X est compris entre 40 et 60 et 0 sinon – nous utilisons pour cela l’opérateur IN.

Code:

DATA test2 ;
   SET test ;
   IF x IN(40 :60) THEN indicatrice=1 ;ELSE indicatrice=0 ;
RUN ;
PROC FREQ ;
   TABLE indicatrice ;
RUN ;

Et on regarde le résultat :

Code:

                                            Fréquence    Pctage
indicatrice    Fréquence     Pourcentage     cumulée      cumulé
ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
          0          97         97.00             97      97.00
          1           3          3.00            100     100.00

Hum... ce n’est pas 3% de 1 que l’on devrait trouver mais quelque chose aux alentours de 20% puisque nos tirages aléatoires sont issus d’une loi uniforme...

Il doit y avoir un problème avec notre compréhension de l’opérateur IN puisque si vous remplacez la condition utilisant l’opérateur IN par :

Code:

IF 40<=x<=60 THEN...

Vous obtenez 19% de 1 ce qui semble plus raisonnable…

La question est donc : Que se passe-t-il précisément si vous utilisez avec l’opérateur IN ce que j’ai présenté (certainement injustement) comme des intervalles ?

à la semaine prochaine

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