2 votes

Erreur lors de l'utilisation de Proc SQL et Case-statement

J'essaie d'utiliser Proc SQL et un case-statement pour tester une condition et ajouter un index. Cependant, je ne parviens pas à obtenir le case - where ne fonctionne pas, même si la syntaxe semble correspondre aux exemples que j'ai vus. En utilisant le code ci-dessous, j'obtiens l'erreur suivante :

ERREUR 22-322 : Erreur de syntaxe, attend l'un des éléments suivants : un nom, une chaîne entre guillemets, une constante numérique, une constante temporelle, une valeur manquante, (, +, -, BTRIM, CALCULATED, CASE, EXISTS, INPU ^, ~.

Proc SQL;
    Create table table_ix AS
    Select t1.*,
            Case
                Where UPCASE(t2.test) Contains UPCASE(TRIM(t2.key)) Then 1
                Else 0
            end as index
    From Table1 AS t1, Table2 AS t2;

QUIT;

D'après l'aide, ma déclaration correspond aux exemples. Il s'agit probablement d'un problème simple à résoudre et d'un oubli mineur de ma part, mais je n'arrive pas à le faire fonctionner (par exemple, j'ai essayé de faire correspondre une seule chaîne de caractères pour voir si la référence à une table séparée était le problème, par exemple...). Contains UPCASE("Teststring") ....
Des suggestions ?

3voto

Tim Biegeleisen Points 53335

La syntaxe standard ANSI pour un CASE que Proc-SQL suit AFAIK, est la suivante CASE WHEN , pas CASE WHERE . Essayez cette requête :

CREATE TABLE table_id AS
SELECT t1.*,
       CASE WHEN FIND(t2.test, TRIM(t2.key), 'i') GE 1 THEN 1 ELSE 0 END AS index
FROM Table1 AS t1, Table2 AS t2;

Note : J'ai remplacé votre appel à CONTAINS avec le FIND car la fonction cette référence SAS mentionne que CONTAINS n'est disponible que dans un WHERE clause.

D'ailleurs, vous auriez pu vouloir ajouter une condition de jointure aux tables 1 et 2. Actuellement, vous effectuez une jointure croisée ouverte entre elles. Mais j'espère que ma requête résoudra l'erreur dans votre CASE l'expression.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X