Le forum du Master ESA économétrie et statistique appliquée - Université d'Orléans

Vous n'êtes pas identifié.

Annonce

Vous êtes sur le forum du master ESA !

Le site du master ESA - description de la formation, notes de cours, contacts... vient de déménager !!!

Venez visiter notre nouveau site : www.master-esa.fr

#1 09-02-2016 10:47:10

Chanoirland
Member
Date d'inscription: 03-09-2013
Messages: 49

Ordre des variables SAS

data test ;
    newvar = height + weight ;
   set sashelp.class;
run ;


data test2;
newvar = SUM(height,weight) ;
   set sashelp.class;
run ;

bizarre bizarre.. dans la premiere table 'test' , l'ordre des variables = NEWVAR WEIGHT HEIGHT, alors que le PDV devrait lire HEIGHT then WEIGHT non?
En utilisant la fonction SUM() par contre, on a pas ce probleme + NEWVAR HEIGHT WEIGHT.

Quelqu'un peut-il m'expliquer *pourquoi* ?

Hors ligne

 

#2 09-02-2016 12:19:39

esa_sr
Administrator
Date d'inscription: 21-02-2007
Messages: 5898
Site web

Re: Ordre des variables SAS

alors là.... me voici bien piégé, moi qui serine aux étudiants qu'on ne peut pas programmer correctement en SAS si on ne comprend pas le fonctionnement du PDV...

ajoutons de la perplexité à la perplexité...

Code:

data testju1 ;
    newvar = height + weight  ;
run;

pas besoin du SET pour obtenir le même résultat.

Votre journal vous dit la chose suivante :

Code:

833  data testju1 ;
834      newvar = height + weight   ;
835  run;

NOTE: Variable weight non initialisée.
NOTE: Variable height non initialisée.

et on continue :

Code:

data testju1 ;
    newvar = weight + height + meight + leigth ;
run;

votre journal :

Code:

839  data testju1 ;
840      newvar = weight + height + meight + leigth ;
841  run;

NOTE: Variable height non initialisée.
NOTE: Variable weight non initialisée.
NOTE: Variable meight non initialisée.
NOTE: Variable leigth non initialisée.

et bien entendu, l'ordre des variables est le suivant :

newvar, height, weight, meight et leigth

mon hypothèse (parce que ça ne sera qu'une hypothèse...) c'est qu'avec ce type de construction, SAS a besoin de connaitre la nature de l'opérateur pour connaître le type de la variable NEWVAR (ça, c'est certain). Il doit aussi avoir besoin de voir ce qui suit l'opérateur (mais là je sèche... il faudrait en effet imaginer une instruction qui comprendrait un signe + et qui permettrait de créer une variable caractère...)

il doit donc procéder ainsi :

1- je vois NEWVAR=, donc dans mon PDV, je réserve le première place à NEWVAR
2- mais il me faut son type,
3- ce qui suit le signe égal ne compte pas
4- je dois arriver au signe + - c'est un opérateur numérique
5- je constate que ce qui suit est un nom de variable (c'est là où mon raisonnement est faible... pourquoi faut-il que SAS aille voir ce qu'il y a "après"...)
6- donc le type de NEWVAR, c'est numérique
7- mais je viens de voir, après le +, un nom de variable : ce sera la numéro 2 dans le pdv (et comme je n'ai aucune autre info, elle sera numérique puisque par défaut, une variable est numérique)
8- attends, avant le + il y avait un truc, c'est quoi déjà ?
9- c'est un nom de variable, elle est numéro 3 et elle est numérique
10- je peux maintenant m'occuper de la fin de l'instruction.

pour SUM, le problème se pose différemment :

1- je vois NEWVAR : position n°1,
2- après le signe =, il y a la fonction SUM : cette variable NEWVAR est numérique puisque SUM crée des variables numériques
3- je regarde ensuite ce qu'il y a entre les parenthèses...


il faut quand même que j'y réfléchisse plus.... (et avoir une idée plus précise du fonctionne du "parseur")

Hors ligne

 

#3 09-02-2016 12:57:04

Chanoirland
Member
Date d'inscription: 03-09-2013
Messages: 49

Re: Ordre des variables SAS

awesome

Hors ligne

 

#4 09-02-2016 16:56:36

esa_sr
Administrator
Date d'inscription: 21-02-2007
Messages: 5898
Site web

Re: Ordre des variables SAS

je devrais songer à bosser au support de SAS ;-)

Hors ligne

 

#5 09-02-2016 17:33:59

Chanoirland
Member
Date d'inscription: 03-09-2013
Messages: 49

Re: Ordre des variables SAS

un poste est disponible dans mon equipe, j'attends le cv big_smile

Hors ligne

 

#6 09-02-2016 18:12:18

esa_sr
Administrator
Date d'inscription: 21-02-2007
Messages: 5898
Site web

Re: Ordre des variables SAS

passez leur mon bouquin, ça devrait suffire...

Hors ligne

 

#7 09-02-2016 18:59:53

Jay
Member
Date d'inscription: 17-09-2013
Messages: 23

Re: Ordre des variables SAS

Vous méritez bien votre titre dans l'à-propos monsieur wink

https://www.facebook.com/S%C3%A9bastien … 5/timeline

Hors ligne

 

#8 09-02-2016 21:31:03

esa_sr
Administrator
Date d'inscription: 21-02-2007
Messages: 5898
Site web

Re: Ordre des variables SAS

le problème, c'est que ce n'est pas moi qui ai crée cette page facebook...

et donc, "Maître de SAS", ce n'est pas de moi... (je m'en voudrais d'ailleurs...)

quelqu'un sait comment on récupère une page facebook faite à son nom mais par quelqu'un d'autre ?

Hors ligne

 

#9 09-02-2016 22:41:13

Jay
Member
Date d'inscription: 17-09-2013
Messages: 23

Re: Ordre des variables SAS

Vous devriez essayer d'envoyer un mail aux anciens qui ont peut etre voulu rendre un hommage au maître. Ça sent la blague potache après un afterwork...

Hors ligne

 

#10 10-02-2016 10:31:24

Katia
Member
Lieu: New York
Date d'inscription: 07-10-2008
Messages: 495

Re: Ordre des variables SAS

Hors ligne

 

#11 10-02-2016 17:33:25

esa_sr
Administrator
Date d'inscription: 21-02-2007
Messages: 5898
Site web

Re: Ordre des variables SAS

sauf qu'il faut se connecter à Facebook... et que je n'ai pas (malgré ce qu'on peut croire...) de compte facebook...

Hors ligne

 

#12 14-02-2016 19:23:04

gozgoz
Member
Date d'inscription: 03-09-2013
Messages: 34

Re: Ordre des variables SAS

Bonsoir,

DATA _NULL_;
a= b + . + c;
*a= b + c;
PUT _ALL_;
RUN;

un petit test qui va dans le sens de l'explication de Mr Ringuedé.

Hors ligne

 

#13 14-02-2016 19:52:02

gozgoz
Member
Date d'inscription: 03-09-2013
Messages: 34

Re: Ordre des variables SAS

La réponse est dans la note 5 associée au tableau "Order of Evaluation in Compound Expressions" que l'on peut trouver ici :

http://support.sas.com/documentation/cd … ulvitxsvtu

Hors ligne

 

#14 15-02-2016 08:15:11

esa_sr
Administrator
Date d'inscription: 21-02-2007
Messages: 5898
Site web

Re: Ordre des variables SAS

Merci Florian !

C'est à mon avis plutôt la note 2 qui est la plus intéressante :

SAS doit lire ce qu'il y a après le + parce que + peut être l'opérateur arithmétique de l'addition ou bien un préfixe.

Il faut savoir ce qu'il y a "après" parce que si + est le préfixe +, l'évaluation de l'expression se fera de droite à gauche, si + marque une addition, elle se fera de gauche à droite !

et voilà ! mystère résolu !

Hors ligne

 

#15 15-02-2016 11:14:04

gozgoz
Member
Date d'inscription: 03-09-2013
Messages: 34

Re: Ordre des variables SAS

Votre raisonnement se tient mr ringuede cependant je pense que si quelque chose de numérique(pour sas) apparaît avant le signe + la question de savoir si + est un opérateur ou un préfixe ne se pose plus et c'est l'opérateur arithmétique qui est compris par sas. Il lira alors de droite à gauche...

Hors ligne

 

#16 15-02-2016 13:13:19

esa_sr
Administrator
Date d'inscription: 21-02-2007
Messages: 5898
Site web

Re: Ordre des variables SAS

sauf que :

Code:

data testju1 ;
    newvar = height + weight  ;
run;

Code:

833  data testju1 ;
834      newvar = height + weight   ;
835  run;

NOTE: Variable weight non initialisée.
NOTE: Variable height non initialisée.

Quand SAS donne son type à WEIGHT, il ne connait pas le type de HEIGHT

Le type des variables mobilisées pour construire une nouvelle variable n'a aucune importance - c'est la nature des opérateurs ou la nature des fonctions (en cas de "doute", ce sont les opérateurs qui ont la priorité) qui va déterminer le type de la variable.

X1=length(y)||1234 -> X1 est caractère
X2="1234"+"4567"; -> X2 est numérique

(et si + est compris comme opérateur arithmétique, la résolution de l'expression se fait de gauche à droite, pas de droite à gauche)

donc je corrige mon explication :

1- je vois NEWVAR=, donc dans mon PDV, je réserve le première place à NEWVAR
2- mais il me faut son type,
3- ce qui suit le signe égal ne compte pas
4- je dois arriver au signe "+" est-ce l'opérateur ou est-ce le préfixe ?
5- pour répondre à la question, je dois comprendre la nature du token qui suit
5- je constate que ce qui suit est un nom de variable (c'est là où mon raisonnement s'éclaire...)
6- donc le type de NEWVAR, c'est numérique puisque le + indique l'opérateur numérique addition
7- mais je viens de voir, après le +, un nom de variable : ce sera la numéro 2 dans le pdv (elle sera numérique puisque par défaut, une variable est numérique)
8- attends, avant le + il y avait un truc, c'est quoi déjà ?
9- c'est un nom de variable, elle est numéro 3 et elle est numérique
10- je peux maintenant m'occuper de la fin de l'instruction.

Hors ligne

 

#17 16-02-2016 10:32:24

esa_gc
Moderator
Date d'inscription: 21-02-2007
Messages: 421

Re: Ordre des variables SAS

ça donne envie !

Hors ligne

 

#18 16-02-2016 22:41:43

esa_sr
Administrator
Date d'inscription: 21-02-2007
Messages: 5898
Site web

Re: Ordre des variables SAS

j'en conviens, il faut un certain amour de la poésie pour être ému par notre discussion ;-)

Hors ligne

 

#19 06-03-2016 07:52:05

gozgoz
Member
Date d'inscription: 03-09-2013
Messages: 34

Re: Ordre des variables SAS

Merci pour cette jolie explication on ne peut + claire!

Hors ligne

 

Pied de page des forums

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson

[ Generated in 0.035 seconds, 8 queries executed ]