IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SAS Base Discussion :

proc sql + if [SQL]


Sujet :

SAS Base

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 32
    Par défaut proc sql + if
    Bonjour
    j'aimerai savoir s'il est possible d'associer une proc sql avec un if. Je m'explique. J'ai 2 tables dont la première contient mes paramètres et la deuxième contient des series expirés. Mes tables se présentent comme suit:

    1. Param
    index series 3y5y 3y7y 3y10 5y7y 5y10
    Eur 8 10 45 60 20 22
    Eur 7 19 49 65 23 25
    Eur 6 15 55 70 26 20
    Eur 5 20 60 75 29 30


    2. expired

    index series tenor
    Eur 5 3y
    Eur 5 5y
    Eur 6 3y
    Eur 7 5y

    Mon objectif est de verifié dans la table expired et que si une serie est expiré alors de mettre à vide les valeurs impactés dans la Param.

    index series 3y5y 3y7y 3y10 5y7y 5y10
    Eur 8 10 45 60 20 22
    Eur 7 19 49 65 . .
    Eur 6 . . . 26 20
    Eur 5 . . . 29 30


    J'ai pensé à associé sql et if mais cela ne semble pas marché.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    PROC SQL;
     
     CREATE TABLE tt3 AS
     
     SELECT a.*,
     IF a.series=b.series  AND b.tenor='3Y' THEN a.Eur3Y5Y=. AND a.Eur3Y7Y=. AND a.Eur3Y10Y=.
      IF a.series=b.series 1 AND b.tenor='5Y' THEN a.Eur5Y7Y=. AND a.Eur5Y10Y=. 
     
               FROM param  AS a, Expired AS B
     
          ;QUIT;
    quelqu 'un a t-il idée.

    merci

  2. #2
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Par défaut
    Bonjour.
    La syntaxe IF THEN ELSE n'existe pas en SQL. Il y a une syntaxe CASE WHEN ELSE END pour les formules conditionnelles mais dans ton cas ce serait un peu long à écrire.
    Pourquoi pas une étape DATA avec un MERGE BY et des IF THEN ELSE ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 32
    Par défaut proc sql + if
    Bonjour,

    J'ai aussi pensé à une étape data avec un merge. mais j'ai un peu de mal à la conceptualisé pour le moment.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 32
    Par défaut proc sql + if
    j'ai pensé à faire un merge par series.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    proc sort data=param ; by series;
    proc sort data=expired; by series;
    data tt; 
    merge param (in=a) expired (in=b); 
    by series;
    if a;
    run;
    la table obtenu en sorti ne me est un peu compliqué.
    j'obtiens deux blocs séparé. dans le premier bloc j'ai les information sur la table expired et dans le deuxième j'ai les informations de la table param. Du coup c'est pas possible de faire le lien entre les deux.

    Faut que je m'y prenne autrement.
    Je pensais qu'une proc sql est plus facile.

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    747
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 747
    Par défaut
    il y a les fonctions IFC et IFN qui peuvent etre mises dans du SQL.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    proc sql;
       create table WORK.ZZ as
       select ifc(mod(monotonic(), 2), 'OUI', 'NON') as TEST 
       from SASHELP.CLASS
       ;
    quit;
    X

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 32
    Par défaut proc sql + if
    Merci Xav pour le tuyau

    j'ai essayé de l'exploiter en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    PROC SQL;
     
    	CREATE TABLE	ttbis AS
    	SELECT DISTINCT a.*,MAX(IFN(a.index=b.family AND a.series=b.series AND b.top_expi=1 AND b.tenor='3Y',1,0)) AS top_3Y,
    						MAX(IFN(a.index=b.family AND a.series=b.series AND b.top_expi=1 AND b.tenor='5Y',1,0)) AS top_5Y,
    						MAX(IFN(a.index=b.family AND a.series=b.series AND b.top_expi=1 AND b.tenor='7Y',1,0)) AS top_7Y
    	FROM param AS a, Expired AS B
    	GROUP BY a.series
    	ORDER BY a.series DESC
     
     
    	;QUIT;
    Du coup j'ai une table avec des top et je n'ai plus qu'à faire une data set avec des if pour avoir ma table fianle.

    Merci à tous.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur %goto et proc sql dans une macro
    Par raf64flo dans le forum Macro
    Réponses: 15
    Dernier message: 17/04/2008, 22h40
  2. supprimer proc sql
    Par cyrano_de_bergerac dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/01/2008, 14h44
  3. executer les proc sql en java
    Par bicho dans le forum JDBC
    Réponses: 1
    Dernier message: 16/05/2007, 16h25
  4. [ProC][SQL] Utiliser une variable comme nom de curseur
    Par adiGuba dans le forum Interfaces de programmation
    Réponses: 1
    Dernier message: 06/12/2006, 11h55
  5. Code retour en sortie de proc sql...
    Par milodanlso dans le forum Oracle
    Réponses: 2
    Dernier message: 26/03/2006, 12h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo