1. #1
    Candidat au Club
    Femme Profil pro
    Consultant statistiques
    Inscrit en
    mai 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2018
    Messages : 5
    Points : 3
    Points
    3

    Par défaut Manipulation de chaines de caractères

    Bonjour,

    Je requiers votre aide pour la construction de nouvelles variables.
    En fait, partant de 2 variables : Source (avec des observations du type '%R', '%R_E', '%P' et '%P_E') et Y1
    je veux construire 1 nouvelle variable V1 telle que si Source du type '%R' alors V1 prend la valeur Y1 (pour Source = '%R') - la valeur Y1 (pour source = '%R_E') (car pour chaque source '%R' il existe exactement la même '%R_E')

    Je pars de ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    proc sql;
    create table draft as
    select * , case
    when Source like '%R' then Y1
    end as V1
    from base;
    run;
    Sachant que là, quand il trouve 1 observation du type '%R', il reprend juste la valeur de Y1 correspondant dans V1. Je ne vois pas comment lui demander de récupérer également la valeur de Y1 pour l'observation '%R_E' .

    Merci par avance pour toute aide

  2. #2
    Membre confirmé
    Homme Profil pro
    Consultant Finance/Assurance
    Inscrit en
    décembre 2013
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant Finance/Assurance

    Informations forums :
    Inscription : décembre 2013
    Messages : 160
    Points : 604
    Points
    604

    Par défaut

    Bonjour,

    Ceci devrait retourner le bon résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    proc sql;
     create table draft as
     select * , case 
    	 when (Source like '%R' or Source like '%R_E')  then Y1
    	 end as V1
     from tt;
    Quit;
    Flo00154

  3. #3
    Candidat au Club
    Femme Profil pro
    Consultant statistiques
    Inscrit en
    mai 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2018
    Messages : 5
    Points : 3
    Points
    3

    Par défaut

    Merci Flo00154 de ta réponse mais, en fait je voudrais qu'en V1 il se fasse la différence entre

    la valeur Y1 (pour Source = '%R') et la valeur Y1 (pour source = '%R_E').
    Donc dans mon code ce que je n'arrive pas à écrire ce n'est pas la condition "when ..." mais ce qui va après "then ... ".

    Merci par avance,

    Fatychan


    Citation Envoyé par flo00154 Voir le message
    Bonjour,

    Ceci devrait retourner le bon résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    proc sql;
     create table draft as
     select * , case 
    	 when (Source like '%R' or Source like '%R_E')  then Y1
    	 end as V1
     from tt;
    Quit;
    Flo00154

  4. #4
    Membre confirmé
    Homme Profil pro
    Consultant Finance/Assurance
    Inscrit en
    décembre 2013
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant Finance/Assurance

    Informations forums :
    Inscription : décembre 2013
    Messages : 160
    Points : 604
    Points
    604

    Par défaut

    Bonjour,

    Tu souhaites faire une différence entre des informations qui se trouvent sur des lignes différentes c'est ça ?
    si c'est le cas, le SQL ne t'aidera pas à le faire, je te conseille de passer par une étape Data.

    Flo00154

  5. #5
    Candidat au Club
    Femme Profil pro
    Consultant statistiques
    Inscrit en
    mai 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2018
    Messages : 5
    Points : 3
    Points
    3

    Par défaut

    Oui c'est effectivement ça que je souhaite faire.

    Merci pour l'aide alors je vais chercher comment faire avec un data

  6. #6
    Membre expérimenté
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    janvier 2013
    Messages
    403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur en SAS/ Statisticien
    Secteur : Enseignement

    Informations forums :
    Inscription : janvier 2013
    Messages : 403
    Points : 1 376
    Points
    1 376

    Par défaut

    Citation Envoyé par fatychan Voir le message
    je veux construire 1 nouvelle variable V1 telle que si Source du type '%R' alors V1 prend la valeur Y1 (pour Source = '%R') - la valeur Y1 (pour source = '%R_E') (car pour chaque source '%R' il existe exactement la même '%R_E')
    Bonjour,
    Pour calculer la différence V, v1-v2, la commande CROSS JOIN est un type de jointure sur 2 tables SQL qui permet de retourner le produit cartésien. (On peut le faire ici sur la même table), avec la commande WHERE pour filtrer les résultats qui respectent les conditions souhaitées.

    Cordialement Ward

  7. #7
    Candidat au Club
    Femme Profil pro
    Consultant statistiques
    Inscrit en
    mai 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2018
    Messages : 5
    Points : 3
    Points
    3

    Par défaut

    Merci Ward !!

    J'ai utilisé CROSS JOIN comme tu me l'as conseillé car je voulais continuer à travailler avec du SQL.

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

Discussions similaires

  1. probleme de création de variable dans une boucle
    Par misterweb dans le forum Syntaxe
    Réponses: 2
    Dernier message: 16/01/2007, 19h21
  2. Réponses: 5
    Dernier message: 30/12/2006, 06h42
  3. Réponses: 1
    Dernier message: 13/12/2006, 10h00
  4. Création de variable dynamique
    Par netsliver dans le forum C++Builder
    Réponses: 1
    Dernier message: 02/08/2006, 18h48
  5. Création de variable
    Par Sephiroth Lune dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 15/11/2005, 14h20

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