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 :

Boucle sur une Table SAS


Sujet :

SAS Base

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2019
    Messages : 13
    Points : 15
    Points
    15
    Par défaut Boucle sur une Table SAS
    Bonjour,
    je débute sur SAS, j'ai un problème. En fait je vais faire une boucle sur une table pour changer les valeur des ses cellules : Voici mon code mais ça marcha pas .
    Merci.
    Code :
    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
    proc sql;
    	select distinct count(*) into: &nbr.
    		from &TABLE.;
    quit;
     
    %put NBRL = &nbr.;
     
    DATA &TABLE.;
    %do j=1 %to 26;
    %DO i=1 %TO &nbr.;
    %if &Table.{i,j}=' ' or &Table.{i,j}='.' %then "bloquant";
    %end
    			%else %if  &Table.{i,j} NOT = ' ' or &Table.{i,j} NOT ='.' %then "NON";
    %end;
    %end;
    %end;
     
    RUN;

  2. #2
    Membre éprouvé
    Avatar de m.brahim
    Homme Profil pro
    SAS / BIG DATA
    Inscrit en
    Juillet 2011
    Messages
    461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : SAS / BIG DATA
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 461
    Points : 1 119
    Points
    1 119
    Billets dans le blog
    14
    Par défaut
    Bonjour,
    Je te propose cette solution en supposant que la table de départ est composée de colonnes numériques et caractères:
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    data test;
    input var var1 var2  $ var3 $;
    cards;
    . 2 3 a b
    2 3 4 . C
    2 . 4 l .
    ;
    run;
     
     
    /*Dans le cas ou tu as des caratères et numerique dans la table */
     
    /*Convert les colonnes numeriques en caractères*/
     
    proc sql;
    select case type
             when 'num'  then catx (   ' ' 
                                    , 'left( put ('
                                    , name
                                    , ','
                                    , case
                                       when format is null then 'best12.' 
                                       else format
                                       end
                                    , ') ) as'
                                    , name
                                )
     
     
     
    when 'char' then name
            else             catx (   ' '
                                    , quote('Error on type')
                                    , 'as'
                                    , name
                                  )
            end        
     into : selections separated by ' , '
     from dictionary.columns
     where libname='WORK' and memname='TEST';
     
    create table allchar as select &selections from test;
     
    quit;
     
    data allchar1(drop=i); 
    set allchar;
    array char _all_;
    do i=1 to dim(char);
    if  char(i)=' ' or char(i)='.' then char(i) = "bloquant"; else  char(i) = 'NON';
    end;
    run;
    Cordialement
    Certification des Talents de la programmation In Memory Statistics sur HADOOP:
    http://talents-imstat.groupe-avisia....avance?uid=162

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2019
    Messages : 13
    Points : 15
    Points
    15
    Par défaut
    Merci beaucoup ! ça marche très bien, serait il possible de vous poser un autre question ? sur cette table que je l'ai crée (des 'non' et des 'bloquant') les lignes sont indexées et sans titres , je veux créer des titres pour les lignes à partir de la table d'origine.
    je fais ça mais il m'a rien donné . :/
    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
    %macro Tab_CNTR(TABLE);
    /*Créer la colonne des noms des BO*/
    proc sql noprint;
         select LB_BO,  case 
    			when LB_BO = 'RIVAGE' then 'BO_RIVAGE'
    			when LB_BO = 'PROGRES' then 'BO_PROGRES'
    			when LB_BO = 'VIE2000' then 'BO_VIE2000'
    			when LB_BO = 'GPAT' then 'BO_GPAT'
    			when LB_BO = 'CAPI' then 'BO_CAPI'
    			when LB_BO = 'GPREV' then 'BO_GPREV'
    			when LB_BO = 'NOCE' then 'BO_NOCE'
    		end as NOM_BO
    		from &TABLE.;
     
    quit;
    %mend

  4. #4
    Membre éprouvé
    Avatar de m.brahim
    Homme Profil pro
    SAS / BIG DATA
    Inscrit en
    Juillet 2011
    Messages
    461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : SAS / BIG DATA
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 461
    Points : 1 119
    Points
    1 119
    Billets dans le blog
    14
    Par défaut
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    data test;
    input lb_bo :$20. var var1 var2  $ var3 $;
    cards;
    RIVAGE . 2 3 a b
    PROGRES 2 3 4 . C
    VIE2000 2 . 4 l .
    ;    
    run;
     
    proc sql;
    select case type
             when 'num'  then catx (   ' ' 
                                    , 'left( put ('
                                    , name
                                    , ','
                                    , case
                                       when format is null then 'best12.' 
                                       else format
                                       end
                                    , ') ) as'
                                    , name
                                )
     
     
     
    when 'char' then name
            else             catx (   ' '
                                    , quote('Error on type')
                                    , 'as'
                                    , name
                                  )
            end        
     into : selections separated by ' , '
     from dictionary.columns
     where libname='WORK' and memname='TEST'  ;
     
     
      create table  allchar as select  &selections from test;
     
     
     select name  
     into : selection1 separated by '  '
     from dictionary.columns
     where libname='WORK' and memname='ALLCHAR' and name ne 'lb_bo' ;
     
    quit;
     
     
    data allchar1(drop=i); 
    retain LB_BO &selection1.;
    set allchar;
    array char &selection1.;
    do i=1 to dim(char);
    if  char(i)=' ' or char(i)='.' then char(i) = "bloquant"; else  char(i) = 'NON';
    end;
    if LB_BO = 'RIVAGE' then LB_BO='BO_RIVAGE';
    if LB_BO = 'PROGRES' then LB_BO = 'BO_PROGRES';
    if LB_BO = 'VIE2000' then LB_BO = 'BO_VIE2000';
    run;
    Cordialement
    Certification des Talents de la programmation In Memory Statistics sur HADOOP:
    http://talents-imstat.groupe-avisia....avance?uid=162

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2019
    Messages : 13
    Points : 15
    Points
    15
    Par défaut
    Bonjour,
    Merci vous m'avez aidé beaucoup, en faite la colonne LB_BO est la colonne numéro 2 , savez vous comment faire pour la translaté(devenir colonne numero 1) avant de faire les derniers if ?
    Merci.

  6. #6
    Membre éprouvé
    Avatar de m.brahim
    Homme Profil pro
    SAS / BIG DATA
    Inscrit en
    Juillet 2011
    Messages
    461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : SAS / BIG DATA
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 461
    Points : 1 119
    Points
    1 119
    Billets dans le blog
    14
    Par défaut
    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
     
    data test;
    input var lb_bo :$20.  var1 var2  $ var3 $;
    cards;
    . RIVAGE 2 3 a b
    2 PROGRES 3 4 . C
    3 VIE2000 . 4 l .
    ;    
    run;
     
     
     
    data test1;
    retain lb_bo var var1 var2 var3;
    set test;
    run;
    Cordialement
    Certification des Talents de la programmation In Memory Statistics sur HADOOP:
    http://talents-imstat.groupe-avisia....avance?uid=162

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2019
    Messages : 13
    Points : 15
    Points
    15
    Par défaut
    oui, mais pour moi mes données sont beaucoup plus volumineuses et j'ai beaucoup des colonnes du coup je peux pas faire ça

  8. #8
    Membre éprouvé
    Avatar de m.brahim
    Homme Profil pro
    SAS / BIG DATA
    Inscrit en
    Juillet 2011
    Messages
    461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : SAS / BIG DATA
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 461
    Points : 1 119
    Points
    1 119
    Billets dans le blog
    14
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    proc sql;
     select name  
     into : rest_var separated by ','
     from dictionary.columns
     where libname='WORK' and memname='TEST' and name ne 'lb_bo' ;
     
     create table order_var as select lb_bo,&rest_var. from test;
     
     quit;
    Cordialement
    Certification des Talents de la programmation In Memory Statistics sur HADOOP:
    http://talents-imstat.groupe-avisia....avance?uid=162

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2019
    Messages : 13
    Points : 15
    Points
    15
    Par défaut
    Merci beaucoup

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

Discussions similaires

  1. [AC-2007] Boucle sur une table et constitution de paires d'entrées selon une valeur
    Par alexweb45 dans le forum VBA Access
    Réponses: 14
    Dernier message: 13/05/2016, 09h00
  2. Modification d'une cellule sur une table SAS
    Par SOS SAS dans le forum Débutez
    Réponses: 2
    Dernier message: 21/02/2014, 15h12
  3. Boucle sur une table SAS requete SQL
    Par tidou95220 dans le forum SAS Base
    Réponses: 10
    Dernier message: 19/02/2013, 11h27
  4. problème de boucle sur une table
    Par alexphi dans le forum VBA Access
    Réponses: 7
    Dernier message: 02/06/2010, 15h40

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