|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre confirmé
![]() Inscription : avril 2008 Messages : 233 ![]() |
1. J'ai une table avec des index et je fais une proc sql avec un where assez simple : where EX_TECH = 2006. Tout est OK, SAS utilise bien l'index.
2. Au lieu d'utiliser la constante dans mon code, je crée une variable macro %let anneeFin = 2006; Ma clause where devient where EX_TECH = &anneeFin. C'est toujours OK, index est utilisé. 3. Je change un peu la clause pour avoir where EX_TECH = &anneeFin. - 1. Là c'est KO - index n'est plus utilisé, le temps de calcul est multiplié par 10. 4. Je change de nouveau where = %eval(&anneeFin. - 1) - c'est de nouveau OK pour l'utilisation d'index. Ce n'est pas vraiment une question, plutôt une observation. je suis étonné, je ne comprends pas pourquoi where EX_TECH = 2005 (la commande après le processeur des macros de p.4) est différent de where EX_TECH = 2006 - 1 (la commande après le processeur des macros de p.3) ? Une bêtise de SAS ? |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() ![]() |
Ce n'est pas lié à SAS, C'est le SQL qui réagit comme ça.
pour chaque enregistrement il fait uns soustraction
__________________
Consultez les FAQs et les anciens postes avant de poser vos questions. Merci
|
|
|
00
|
|
|
#3 |
|
Membre confirmé
![]() Inscription : avril 2008 Messages : 233 ![]() |
Tu plaisantes ? N'importe quel préprocesseur du SQL reconnaît "2006 - 1" comme une constante. Bon, pas n'importe quel, sauf celui de SAS.
Je suis vraiment désagréablement surpris. Faites gaffe les gars. |
|
|
00
|
|
|
#4 | ||
|
Membre chevronné
![]() ![]() |
Je dirai que c'est un problème d'affectation. En effet avec une fonction, SAS utilise bien l'index :
where EX_TECH = sum(&anneeFin. , -1) A noter au passage, pour voir si SAS utilise ou non un index : options msglevel=I; Code :
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com