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 :

Flag une variable par rapport à la présence d'une autre variable dans une array


Sujet :

SAS Base

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 155
    Points : 37
    Points
    37
    Par défaut Flag une variable par rapport à la présence d'une autre variable dans une array
    Bonjour

    J'ai une chaine de caractère composée par plusieurs parties séparées par un "-"
    Je veux éclater cette chaine en plusieur colonne,et ça marche avec le array :code ci-dessous:

    le sep_colll :me calcule le nombre de "-"

    ex:
    colonneA
    droit-gauche-haut-bas

    ça donne;

    col1 col2 col3 col4 col5
    droit gauche haut bas

    je veux aussi qu'il flag chaque newvar en 1 et si il n'ya pas de valeur dans col il le flag à 0 .
    résultat souhaité:
    col1 newvar1 col2 newvar2 col3 newvar3 col4 newvar4 col5 newvar5
    droit 1 gauche 1 haut 1 bas 1 . 0


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    data Q2 ;
    set Q1;
     
    array v_p(*) $50. col1-col%cmpres(%eval(&sep_colll+1));
     
    do j=1 to (%eval(&sep_colll+1));
    v_p(j)= scan (col,j);
    	;
    end;
    output ;
    Merci pour votre aide

  2. #2
    Membre expérimenté
    Homme Profil pro
    Attaché statisticien
    Inscrit en
    Mai 2011
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Attaché statisticien
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2011
    Messages : 687
    Points : 1 581
    Points
    1 581
    Par défaut
    Salut,

    j'ai essayé de relire plusieurs fois ta question (dont je ne vois pas le rapport avec le titre) sans comprendre ce tu souhaite faire, et cerner ce que tu n'arrive pas à faire...

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 155
    Points : 37
    Points
    37
    Par défaut
    Oups !! vous avez toute à fait raison,le titre ne correspond pa à mon besoin,c'est parce que j'ai changé mon besoin entre temps et j'ai oublié de modifier le titre.
    Je ne sais pas si je peux modifier le titre à ce stade ou pas ? "Flag une variable par rapport à la présence d'une autre variable dans une array"

    mon besoin c'est de flaguer la newvar par rapport au COL.
    si j'ai une valeur dans col1 flag newvar1 en 1 si non 0
    si j'ai une valeur dans col2 flag newvar2 en 1 si non 0...

    Merci pour la remarque sur le titre.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    Janvier 2013
    Messages
    483
    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 : 483
    Points : 1 552
    Points
    1 552
    Par défaut
    Bonjour,
    C’est une proposition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    data base ;
    input text $50. ;
    cards ;
    droit-gauche-haut-bas
    haut-bas
    gauche-haut
    ;  run ;    
     
    data t1  ;
    set base;	
    nb = countc(text, '-')+1 ;  
    do i = 1 to nb ;	
    id=_n_ ;	
    col =compress(scan(text, i, '-')); 
    newvar=1 ;
    output ;
    end;
    run ;	 
     
    option missing=0 ;
    proc transpose data=t1 out=t2(drop=_name_) ;
    by id ;
    var newvar ;
    id col ;
    run ;
    Cdt Ward

  5. #5
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2011
    Messages : 1 625
    Points : 3 403
    Points
    3 403
    Par défaut
    Salut,
    N'utilise pas la transpose, je te donne une piste. Sert toi des fonctions IFC ou IFN pour le 0,1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    data base ;
    input col $50. ;
    cards ;
    droit-gauche-haut-bas
    haut-bas
    gauche-haut
    ;  run ; 
     
    data Q2 ;
    set base;
     
    array v_p(*) $50. col1-col4;
    array v(*)  $1. flagcol1-flagcol4;
    	do j=1 to 4;
    		v_p(j)= scan (col,j);
    		v(j)= lengthn(v_p(j));
    	end;
    output ;
    run;

  6. #6
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2011
    Messages : 1 625
    Points : 3 403
    Points
    3 403
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    v(j)= ifc(lengthn(v_p(j))>0,'1','0');

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 155
    Points : 37
    Points
    37
    Par défaut
    Merci à vous ward et sam,j'avais trouvé la solution hier soir c'est le même principe indiqué par sam.dsl pour ma réponse tardive je voulai tester mon traitement aujourdhui si ça march !!
    et ben ça march

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    data Q2 ;
    set Q1;
     
    array v_p(*) $50. col1-col%cmpres(%eval(&sep_colll+1));
     array f(*) newvar1 newvar2 newvar3 newvar4;
     
    do j=1 to (%eval(&sep_colll+1));
    v_p(j)= scan (col,j);
    if scan (col,j) not='' then f(j)=1 ; else f(j)=0;
    end;
    output ;

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 16/06/2014, 09h22
  2. Modifier une année dans une macro par rapport au répertoire
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 19/04/2011, 14h13
  3. Réponses: 18
    Dernier message: 03/07/2009, 15h19
  4. Réponses: 3
    Dernier message: 01/06/2009, 18h21
  5. Réponses: 7
    Dernier message: 08/03/2007, 16h42

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