Erreur de programmation

Bonjour à tous,

Je suis novice et je travaille actuellement sur un programme SAS et j'utilise le langage SQL.
J'aimerai avoir votre avis sur le problème suivant:

Je possède une table BASE comme suit:

BASE:
Concurrent | Z | X | Y
MACIF | 100% | 100% | 6
MACIF | 100% | 156% | 7
MACIF | 100% | 200% | 8
AVIVA | 225% | 100% | 6
AVIVA | 225% | 156% | 7
AVIVA | 225% | 200% | 8

mon programme est comme cela:

proc sql;
create table TEST as
select distinct *,x as X1 ,y as Y1 from BASE where x = (select max(x) from BASE where x <= z)
group by Concurrent;
quit;

Le problème c'est que j'obtiens cela:

TEST:
Concurrent | Z | X | Y
MACIF | 100% | 200% | 8
AVIVA | 225% | 200% | 8

Alors que j'aimerais obtenir cela:

TEST:
Concurrent | Z | X | Y
MACIF | 100% | 100% | 6
AVIVA | 225% | 200% | 8

Merci d'avance pour votre aide.

Configuration: Windows / Chrome 92.0.4515.159

3 réponses

  1. Je suis dsl, mais étant novice je ne vois pas ou tu veux en venir.
    J'ai publié ce message pour obtenir de l'aide car je ne sais pas
    1. Contributeur
      réfléchis alors à ce que
      select max(x) from BASE where x <= z
      te retourne.
      les données mises dans la table ne sont pas assez nombreuses ni assez variées, elle ne t'aide pas à comprendre ce que tu fais.
  2. La règle?
    Je ne comprend pas ta question.
    J'aimerais que obtenir un résultat par concurrent, alors que la il prend la dernière valeur calculé et l'applique à tous
    1. Contributeur
      quel critère utilises-tu pour déterminer quel résultat tu veux obtenir?
      quand tu auras bien expliqué cela, tu pourras commencer à concevoir la requête pour y arriver.
    2. @yg_beDu coup j'ai réussi autrement, en divisant mon programme en deux requêtes.
      Mais j'aurai aimé comprendre pourquoi ma requête imbriquée ne marchait pas...dommage
  3. Contributeur
    bonjour,
    avant tout, explique-nous la règle qui conduit au résultat que tu attends.