Vous n'êtes pas identifié.
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
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
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é...
data testju1 ; newvar = height + weight ; run;
pas besoin du SET pour obtenir le même résultat.
Votre journal vous dit la chose suivante :
833 data testju1 ; 834 newvar = height + weight ; 835 run; NOTE: Variable weight non initialisée. NOTE: Variable height non initialisée.
et on continue :
data testju1 ; newvar = weight + height + meight + leigth ; run;
votre journal :
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
awesome
Hors ligne
un poste est disponible dans mon equipe, j'attends le cv
Hors ligne
Vous méritez bien votre titre dans l'à-propos monsieur
https://www.facebook.com/S%C3%A9bastien … 5/timeline
Hors ligne
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
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
Hors ligne
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
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
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
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
sauf que :
data testju1 ; newvar = height + weight ; run;
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
ça donne envie !
Hors ligne
Merci pour cette jolie explication on ne peut + claire!
Hors ligne