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 :

Manipulation de chaines de caractères


Sujet :

SAS Base

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Consultant statistiques
    Inscrit en
    Mai 2018
    Messages
    6
    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 : 6
    Points : 5
    Points
    5
    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
    198
    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 : 198
    Points : 638
    Points
    638
    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
    Futur Membre du Club
    Femme Profil pro
    Consultant statistiques
    Inscrit en
    Mai 2018
    Messages
    6
    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 : 6
    Points : 5
    Points
    5
    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
    198
    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 : 198
    Points : 638
    Points
    638
    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
    Futur Membre du Club
    Femme Profil pro
    Consultant statistiques
    Inscrit en
    Mai 2018
    Messages
    6
    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 : 6
    Points : 5
    Points
    5
    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
    482
    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 : 482
    Points : 1 547
    Points
    1 547
    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
    Futur Membre du Club
    Femme Profil pro
    Consultant statistiques
    Inscrit en
    Mai 2018
    Messages
    6
    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 : 6
    Points : 5
    Points
    5
    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 Langage
    Réponses: 2
    Dernier message: 16/01/2007, 20h21
  2. Réponses: 5
    Dernier message: 30/12/2006, 07h42
  3. Réponses: 1
    Dernier message: 13/12/2006, 11h00
  4. Création de variable dynamique
    Par netsliver dans le forum C++Builder
    Réponses: 1
    Dernier message: 02/08/2006, 19h48
  5. Création de variable
    Par Sephiroth Lune dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 15/11/2005, 15h20

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