Erreur de programmation

badebila12 Messages postés 4 Statut Membre -  
yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   -
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. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour,
    avant tout, explique-nous la règle qui conduit au résultat que tu attends.
    0
  2. badebila12 Messages postés 4 Statut Membre
     
    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
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      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.
      0
      1. badebila12 Messages postés 4 Statut Membre > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Du 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
        0
  3. badebila12 Messages postés 4 Statut Membre
     
    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
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      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.
      0