Requête qui ne fonctionne pas [SQL/SAS] - SQL/NoSQL - Programmation
Marsh Posté le 03-02-2016 à 15:38:57
Les & ne doivent pas convenir
Marsh Posté le 03-02-2016 à 16:01:08
J'ai pourtant l'impression que ça convient bien : c'est bien interprété, et par exemple si j'exécute la requête incluse seule, elle fonctionne.
Mes messages d'erreur me mettent le code interprété, et il est bon :
(Je l'appelle 3 fois avec des valeurs indiquées en dur pour voir si ça marche, et ces valeurs sont bien reprises)
Toutes mes excuses mais reho.st est mort, donc je passe par HostingPics (vignette cliquable) :
J'ai l'impression qu'il y a (encore) une particularité liée à SAS que j'ignore...
Marsh Posté le 03-02-2016 à 16:05:41
Je connais pas SAS, désolé.
Marsh Posté le 03-02-2016 à 16:07:25
Moi non plus, et là est bien mon problème
Merci quand même, ça me confirme au moins qu'il n'y a pas une énormité dans ma requête que j'aurais ratée
Marsh Posté le 04-02-2016 à 09:26:40
Si c'est du "vrai" SQL, quelque chose m'échappe : tu fais (B - A) où B est une colonne et A une valeur ?
Tu ne soustrairais pas des choux et des carottes ?
Marsh Posté le 04-02-2016 à 09:38:07
Je pense qu'il veut dire que b désigne une valeur de la colonne val_nx.
Donc, il calcule pour chaque enregistrement dans la table table_q, (val_nx - a).
Edit : cela dit, ça serait pas plus simple de faire : select q, (b-a) as Diff from etape01.table_q ORDER BY Diff Limit 0, 1
Limit 0, 1 c'est pour avoir juste le premier enregistrement ayant le Diff le plus faible. Ca évite la sous-requête.
Marsh Posté le 04-02-2016 à 12:49:30
Chelmi18 > En fait, &b est effectivement le nom de la colonne et &a une valeur, mais cette valeur &a est interprétée comme une matrice de dimension (1,n) qui contiendrait tout le temps la meme valeur. Ca fonctionne quand les requêtes ne sont pas imbriquées.
rufo > J'ai fait des tests avec LIMIT, je voulais faire des SORT BY puis récupérer mon minimum avec un LIMIT... sauf que LIMIT n'est pas reconnu par SAS (quel logiciel en mousse, au prix qu'il coute... ) Il faut le préciser via un outobs= mais qui s'applique à toute la proc, ça ne m'arrange pas du coup.
Je crois que je vais devoir forcément créer deux proc SQL à la suite pour réussir à faire mon truc.
Marsh Posté le 03-02-2016 à 13:35:18
Bonjour,
Voici mon problème, que je vais essayer de vous exposer le plus clairement possible :
J'ai une table qui contient des infos du format suivant :
| q | val_n1 | val_n2 | ... | val_n33 |
| 0.00001 | | | | |
| ... | | | | |
| 1 | | | | |
J'ai en entrée :
- a : la valeur que je dois chercher
- b : la colonne "val_nx" dans laquelle je dois chercher
Je veux trouver dans la colonne b la valeur la plus proche de a, et récupérer la valeur de q correspondant à cette ligne.
Après moult essais, voici ce à quoi j'arrive pour le moment, et qui ne fonctionne pas
%macro test(a,b);
proc sql;
select q
from etape01.table_q
where abs(&b-&a)=(select min(abs(&b-&a)) from etape01.table_q)
quit;
%mend test;
Ce code me renvoie l'erreur suivante :
Syntax error, expecting one of the following: !, !!, &, *, **, +, -, /, <, <=, <>, =, >, >=, AND, EQ, EQT, GE, GET, GROUP, GT, GTT, HAVING, LE, LET, LT, LTT, NE, NET, OR, ORDER, ^=, |, ||, ~=.
Je suppose qu'il y a un truc évident qui m'échappe : l'un d'entre vous pourrait-il m'aider à faire fonctionner ma macro ?
Merci d'avance à ceux qui pourront m'aider
Message édité par $temp le 03-02-2016 à 13:37:03