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 :

Selectionner une colonne en fonction de la valeur d'une autre colonne


Sujet :

SAS Base

  1. #1
    Membre actif
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Points : 203
    Points
    203
    Par défaut Selectionner une colonne en fonction de la valeur d'une autre colonne
    (Re)bonjour,

    Je me demande si ce que je cherche à faire est techniquement possible... . Je ne vous explique pas toute la situation mais seulement une sous partie du problème.

    J'ai un dataset d'une seule ligne et plusieurs colonnes. Voici les colonnes:
    - TermToCode
    - col1
    - col2
    - col3
    - res1
    - res2
    - res3

    Le but du programme est d'associer TermToCode soit à col1 soit à col2 soit à col3.
    Le choix de col1, col2 ou col3 se fait en fonction de res1, res2 ou res3.
    Le choix de res1, res2 ou res3 se fait en fonction de la valeur de ces variables: c'est la valeur minimum qui gagne.

    si min(of res1-res3) est la valeur contenue dans res1 alors créer dataset contenant TermToCode et col1
    si min(of res1-res3) est la valeur contenue dans res2 alors créer dataset contenant TermToCode et col2
    si min(of res1-res3) est la valeur contenue dans res3 alors créer dataset contenant TermToCode et col3

    voici mon code qui ne fonctionne pas...

    j'ai voulu imbriquer une étape data dans une étape data et ça a pas l'air de lui plaire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    data DistMixInter;
    	set DistMix;
    	closest=min(of res1-res3);
    	Array TabRes{*} res1-res3;
    	Array TabCol{*} col1-col3;
    	do i=1 to dim(TabRes);
    		if TabRes[i]=closest then do;
    			data DistMixFinal (keep= TermToCode TabCol[i] TabRes[i]);
    				set DistMixInter;
    			run;
    		end;
    	end;
    run;


    Merci de votre aide.

  2. #2
    Membre actif
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Points : 203
    Points
    203
    Par défaut
    OK autant pour moi.

    je viens de trouver. je sépare en 2 étapes après avoir mis le TabCol[i] dans une variable.

    ceci étant dit, avant de mettre le topic en résolu, qqn pourrait il me dire s'il est possible d'imbriquer une étape data dans une étape data ?

    merci

  3. #3
    Membre éclairé
    Homme Profil pro
    responsable adjoint service stat
    Inscrit en
    Mars 2009
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : responsable adjoint service stat
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2009
    Messages : 448
    Points : 823
    Points
    823
    Par défaut
    A ma connaissance, c'est impossible.
    En revanche, tu peux inbriquer des requêtes SQL

  4. #4
    Membre actif
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Points : 203
    Points
    203
    Par défaut
    ok.

    oui j'ai déjà tenté les proc sql dans une étape data et sas n'a rien dit mais là une étape data dans une étape data ça lui a pas trop plu car pour lui j'avais pas fermé la 1ère.

    merci pour ta réponse.
    je mets le topic en résolu.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 249
    Points : 290
    Points
    290
    Par défaut
    Bonjour,

    Pour répondre à ta question telle que posée : NON.
    Mais je te laisse le soin de trouver la documentation sur le call execute qui permet de préparer une étape data au cours d'une étape data.
    Pour faire simple : le call execute permet de mettre des chaînes de caractères en mémoire qui seront exécutées à la fin de l'étape data qui les a créé.
    Si ces chaînes de caractères représentent le code d'une étape data, on peut être moins catégorique lors de la réponse à ta question initiale...

    Bon courage !

  6. #6
    Membre actif
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Points : 203
    Points
    203
    Par défaut
    ah ouais, c sympa ton truc. je connaissais pas du tout et effectivement ça semblerait contourner mon problème.

    merci pr l'info.

    jour après jour, je découvre que sas peut faire vraiment plein de trucs

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/10/2014, 22h48
  2. Réponses: 4
    Dernier message: 01/02/2013, 15h01
  3. Réponses: 2
    Dernier message: 02/09/2011, 14h25
  4. lancer une macro en fonction de la valeur d'une cellule
    Par arkorrigan dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 11/06/2008, 17h18
  5. Réponses: 7
    Dernier message: 13/10/2007, 23h31

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