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

Macro Discussion :

Importer 2 fichiers excel et renommer les variables


Sujet :

Macro

  1. #1
    Membre à l'essai
    Homme Profil pro
    Responsable des études
    Inscrit en
    Août 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable des études

    Informations forums :
    Inscription : Août 2018
    Messages : 10
    Points : 10
    Points
    10
    Par défaut Importer 2 fichiers excel et renommer les variables
    Bonjour,

    Je vous expose ma difficulté :

    J’ai 2 fichiers excel (.xls) qui se ressemblent beaucoup, appelons-les fichierA.xls et fichierB.xls.

    Les données que je souhaite importer sur SAS sont sur un onglet « Total » identique aux 2 fichiers.
    Les données à importer commencent en ligne 9 et colonne 2… L’information importante c’est qu’il n’y a pas de noms de colonnes… ça ressemble à ça :

    Nom : dem1.png
Affichages : 661
Taille : 12,4 Ko

    Quand j’importe mes données ainsi :

    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
    %let mv_dossier_src = C:\;
    %let mv_onglet = 'TOTAL';
     
     
    %let mv_fic_src = FichierA.xls;
    Proc import 
    	datafile="&mv_dossier_src.&mv_fic_src."
    	out=FicA
    	replace
    	dbms=xls;
    	datarow=9;
    	sheet=&mv_onglet.;
    	getnames=no;
    run;
     
    %let mv_fic_src = FichierB.xls;
    Proc import 
    	datafile="&mv_dossier_src.&mv_fic_src."
    	out=FicB
    	replace
    	dbms=xls;
    	datarow=9;
    	sheet=&mv_onglet.;
    	getnames=no;
    run;
    J’obtiens ceci (proc contents) :

    Fichier A (PIZZAS)


    Nom : dem2.png
Affichages : 678
Taille : 44,8 Ko

    Fichier B

    Nom : dem3.png
Affichages : 672
Taille : 34,5 Ko


    Les variables sont nommées automatiquement de A à Z pour le fichier A et A à Y pour le fichier B

    Les variables sont identiques à une différence près :

    Je voudrais pour le fichier A avoir ceci
    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
    rename 
    B=LIBELLE
    C=SEGMENT
    D=MANUFACTURER
    			E=BRAND
    	        F=GAMME
    	        G=BASICSIZE
    	        H=MULTIPACK
    	        I=PACKAGING
    	        J=VARIETY
    	        K=Ventes_CA_N_1
    	        L=Ventes_CA_N
    	        M=Ventes_UVC_N_1
    	        N=Ventes_UVC_N
    	        O=PDM_CA_N_1
    	        P=PDM_CA_N
    	        Q=PDM_UVC_N_1
    	        R=PDM_UVC_N
    	        S=EVOL_CA_N_1
    	        T=EVOL_CA_N
    	        U=PRIX_MOYEN_N_1
    	        V=PRIX_MOYEN_N
    	        W=DN_N_1
    	        X=DN_N
    	        Y=DV_N_1
    	        Z=DV_N;
    Et pour le fichier B :

    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
    rename 
    			B=LIBELLE
    	        C=MANUFACTURER
    			D=BRAND
    	        E=GAMME
    	        F=BASICSIZE
    	        G=MULTIPACK
    	        H=PACKAGING
    	        I=VARIETY
    	        J=Ventes_CA_N_1
    	        K=Ventes_CA_N
    	        L=Ventes_UVC_N_1
    	        M=Ventes_UVC_N
    	        N=PDM_CA_N_1
    	        O=PDM_CA_N
    	        P=PDM_UVC_N_1
    	        Q=PDM_UVC_N
    	        R=EVOL_CA_N_1
    	        S=EVOL_CA_N
    	        T=PRIX_MOYEN_N_1
    	        U=PRIX_MOYEN_N
    	        V=DN_N_1
    	        W=DN_N
    	        X=DV_N_1
    	        Y=DV_N;

    La différence entre le fichier A et B se situe au niveau de la colonne C

    On a :
    B=LIBELLE (fichier A et B)
    C=SEGMENT (fichier A) et C=MANUFACTURER (fichier B)
    D=MANUFACTURER (fichier A) et D=BRAND (fichier B)
    E=BRAND (fichier A) et E=GAMME (fichier B)
    Ainsi de suite…

    Est-ce possible via un macro programme d’importer facilement ces 2 fichiers et de renommer correctement les variables ?
    Je ne voudrais pas écrire 2 fois les noms des variables si possible…

    Pour info, j’ai 4 fichiers qui concernent cette problématique … donc si pas de solutions, je dois écrire 4 fois les noms des variables… je suis sûr qu’il doit y avoir une solution mais j’ai beau chercher (proc import, data infile, etc…) je ne trouve pas… je suis à court d’idées !

    Merci pour votre aide !!

  2. #2
    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
    Bonjour,
    Si je compare les deux fiches je constate qu’en supprimant la modalité « SEGMENT » de la FichB, il faudrait déplacer les modalités suivantes vers le haut tout en conservant l’ordre alphabétique de B à Z pour la FichA et de B à Y pour la FichB. Afin de résoudre cette problématique, on doit créer un catalogue unique pour toutes les tables à modifier B, C et D car tu as 4 fichiers concernées.
    Il n’y a aucune modalité à supprimer pour la table A. On renomme, donc, directement les variables.
    1) Créer un catalogue unique,
    2) Une macro pour automatiser le travail à l’aide de la fonction BYTE qui génère automatique les lettres de A à Z, même en cas de suppression de modalités. Dans cette fonction le conteur commence par Obs+1 car la première lettre de la fiche est « B ».
    3) Afin d’exécuter la MACRO, il suffit de mettre le nom de la fiche et le nom de la modalité à supprimer pour la table souhaité B, C ou D.
    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
    /* Création du catalogue, on garde uniquement les noms des modalités */
    data Catalogue ;
    Infile cards truncover;
    input Variables: $20. ;
    Variables=scan(Variables, 2,  '=') ;
    cards ; 
    B=LIBELLE		
    C=SEGMENT		
    D=MANUFACTURER	
    E=BRAND			
    F=GAMME			
    G=BASICSIZE		
    H=MULTIPACK		
    I=PACKAGING		
    J=VARIETY		
    K=Ventes_CA_N_1	
    L=Ventes_CA_N	
    M=Ventes_UVC_N_1
    N=Ventes_UVC_N	
    O=PDM_CA_N_1	
    P=PDM_CA_N		
    Q=PDM_UVC_N_1	
    R=PDM_UVC_N		
    S=EVOL_CA_N_1 	
    T=EVOL_CA_N		
    U=PRIX_MOYEN_N_1
    V=PRIX_MOYEN_N 	
    W=DN_N_1		
    X=DN_N			
    Y=DV_N_1		
    Z=DV_N			
    ;  run  ;  
    
    %Macro Rename (NomFich=, ModaVar=);
    data _null_  ;                                                                    
    set Catalogue end=fin ; 
    length  listvars $ 9999 ;                                                     
    retain listvars ;   
    %if &NomFich.= FichB %then %Do ; if variables="&ModaVar." then delete ; %end  ;	 
    Obs+1 ;
    Lettre=byte(64+Obs+1) ; 
    listvars= catx( ' ; ', listvars, cat('Rename ', Lettre, ' = ', strip(Variables)) ) ;
    if fin then call symputx('Renames', strip(listvars), 'G');   
    run ;  	 
    %Mend Rename ;   %Rename(NomFich=FichB, ModaVar=SEGMENT)  ; 
    
    /* Vérification */ 
    
    %Rename(NomFich=FichA, ModaVar= )  ; 
    /* Jeu de données */	
    data TabA   ; retain B C D E F G H Y Z 0 ; run ; 
    data RTabA ; set TabA ; &Renames. ; run ; 
    
    %Rename(NomFich=FichB, ModaVar=SEGMENT)  ; 
    /* Jeu de données */ 
    data TabB ; retain B C D E F G H X Y 0 ; run ;
    data RTabB ; set TabB ; &Renames. ; run ;
    Bon Courage
    Ward

  3. #3
    Membre à l'essai
    Homme Profil pro
    Responsable des études
    Inscrit en
    Août 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable des études

    Informations forums :
    Inscription : Août 2018
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    Je te remercie pour ta réponse. Cela me donne des tables vides... je remets le pgm :

    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    options mprint;
     
    %let mv_dossier_src = E:\SAS\data\users\commun\sources\NIELSEN BELGIQUE\;
    %let mv_onglet = 'TOTAL BELGIUM';
     
    %let mv_fic_src = Report on Box_BE_2018.xls;
    Proc import 
    	datafile="&mv_dossier_src.&mv_fic_src."
    	out=BOX
    	replace
    	dbms=xls;
    	datarow=9;
    	sheet=&mv_onglet.;
    	getnames=no;
    run;
     
     
    %let mv_fic_src = Report on Pizzas fraiches_BE_2018.xls;
    Proc import 
    	datafile="&mv_dossier_src.&mv_fic_src."
    	out=PIZZAS
    	replace
    	dbms=xls;
    	datarow=9;
    	sheet=&mv_onglet.;
    	getnames=no;
    run;
     
     
    /* Création du catalogue, on garde uniquement les noms des modalités */
    data Catalogue ;
    Infile cards truncover;
    input Variables: $20. ;
    Variables=scan(Variables, 2,  '=') ;
    cards ; 
    B=LIBELLE		
    C=SEGMENT		
    D=MANUFACTURER	
    E=BRAND			
    F=GAMME			
    G=BASICSIZE		
    H=MULTIPACK		
    I=PACKAGING		
    J=VARIETY		
    K=Ventes_CA_N_1	
    L=Ventes_CA_N	
    M=Ventes_UVC_N_1
    N=Ventes_UVC_N	
    O=PDM_CA_N_1	
    P=PDM_CA_N		
    Q=PDM_UVC_N_1	
    R=PDM_UVC_N		
    S=EVOL_CA_N_1 	
    T=EVOL_CA_N		
    U=PRIX_MOYEN_N_1
    V=PRIX_MOYEN_N 	
    W=DN_N_1		
    X=DN_N			
    Y=DV_N_1		
    Z=DV_N			
    ;  run  ;  
     
    %Macro Rename (NomFich=, ModaVar=);
    data _null_  ;                                                                    
    set Catalogue end=fin ; 
    length  listvars $ 9999 ;                                                     
    retain listvars ;   
    %if &NomFich.= BOX %then %Do ; if variables="&ModaVar." then delete ; %end  ;	 
    Obs+1 ;
    Lettre=byte(64+Obs+1) ; 
    listvars= catx( ' ; ', listvars, cat('Rename ', Lettre, ' = ', strip(Variables)) ) ;
    if fin then call symputx('Renames', strip(listvars), 'G');   
    run ;  	 
    %Mend Rename ;   
     
    *%Rename(NomFich=FichB, ModaVar=SEGMENT)  ; 
     
    /* Vérification */ 
     
    %Rename(NomFich=PIZZAS, ModaVar= )  ; 
    /* Jeu de données */	
    data TabA   ; retain B C D E F G H Y Z 0 ; run ; 
    data RTabA ; set TabA ; &Renames. ; run ; 
     
    %Rename(NomFich=BOX, ModaVar=SEGMENT)  ; 
    /* Jeu de données */ 
    data TabB ; retain B C D E F G H X Y 0 ; run ;
    data RTabB ; set TabB ; &Renames. ; run ;
    Voici la log :

    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    1          ;*';*";*/;quit;run;
    2          OPTIONS PAGENO=MIN;
    3          %LET _CLIENTTASKLABEL='Programme6';
    4          %LET _CLIENTPROJECTPATH='C:\Users\xdonchery\Desktop\test_belgique.egp';
    5          %LET _CLIENTPROJECTNAME='test_belgique.egp';
    6          %LET _SASPROGRAMFILE=;
    7          
    8          ODS _ALL_ CLOSE;
    9          OPTIONS DEV=PNG;
    10         GOPTIONS XPIXELS=0 YPIXELS=0;
    11         
    12         GOPTIONS ACCESSIBLE;
    13         options mprint;
    14         
    15         %let mv_dossier_src = E:\SAS\data\users\commun\sources\NIELSEN BELGIQUE\;
    16         %let mv_onglet = 'TOTAL BELGIUM';
    17         
    18         %let mv_fic_src = Report on Box_BE_2018.xls;
    19         Proc import
    20         	datafile="&mv_dossier_src.&mv_fic_src."
    21         	out=BOX
    22         	replace
    23         	dbms=xls;
    24         	datarow=9;
    25         	sheet=&mv_onglet.;
    26         	getnames=no;
    27         run;
     
    NOTE: The import data set has 64 observations and 25 variables.
    NOTE: Compressing data set WORK.BOX increased size by 100.00 percent. 
          Compressed is 2 pages; un-compressed would require 1 pages.
    NOTE: WORK.BOX data set was successfully created.
    NOTE: PROCEDURE IMPORT used (Total process time):
          real time           0.01 secondes
          cpu time            0.00 secondes
     
     
    28         
    29         
    30         %let mv_fic_src = Report on Pizzas fraiches_BE_2018.xls;
    31         Proc import
    32         	datafile="&mv_dossier_src.&mv_fic_src."
    33         	out=PIZZAS
    34         	replace
    35         	dbms=xls;
    36         	datarow=9;
    37         	sheet=&mv_onglet.;
    38         	getnames=no;
    39         run;
     
    NOTE: The import data set has 404 observations and 26 variables.
    NOTE: Compressing data set WORK.PIZZAS decreased size by 0.00 percent. 
          Compressed is 3 pages; un-compressed would require 3 pages.
    NOTE: WORK.PIZZAS data set was successfully created.
    NOTE: PROCEDURE IMPORT used (Total process time):
          real time           0.02 secondes
          cpu time            0.03 secondes
     
    2                                                          Le Système SAS                             09:17 Friday, January 25, 2019
     
     
    40         
    41         
    42         /* Création du catalogue, on garde uniquement les noms des modalités */
    43         data Catalogue ;
    44         Infile cards truncover;
    45         input Variables: $20. ;
    46         Variables=scan(Variables, 2,  '=') ;
    47         cards ;
     
    NOTE: The data set WORK.CATALOGUE has 25 observations and 1 variables.
    NOTE: Compressing data set WORK.CATALOGUE increased size by 100.00 percent. 
          Compressed is 2 pages; un-compressed would require 1 pages.
    NOTE: DATA statement used (Total process time):
          real time           0.00 secondes
          cpu time            0.01 secondes
     
    73         ;  run  ;
     
    74         
    75         %Macro Rename (NomFich=, ModaVar=);
    76         data _null_  ;
    77         set Catalogue end=fin ;
    78         length  listvars $ 9999 ;
    79         retain listvars ;
    80         %if &NomFich.= BOX %then %Do ; if variables="&ModaVar." then delete ; %end  ;	
    81         Obs+1 ;
    82         Lettre=byte(64+Obs+1) ;
    83         listvars= catx( ' ; ', listvars, cat('Rename ', Lettre, ' = ', strip(Variables)) ) ;
    84         if fin then call symputx('Renames', strip(listvars), 'G');
    85         run ;  	
    86         %Mend Rename ;
    87         
    88         *%Rename(NomFich=FichB, ModaVar=SEGMENT)  ;
    89         
    90         /* Vérification */
    91         
    92         %Rename(NomFich=PIZZAS, ModaVar= )  ;
    MPRINT(RENAME):   data _null_ ;
    MPRINT(RENAME):   set Catalogue end=fin ;
    MPRINT(RENAME):   length listvars $ 9999 ;
    MPRINT(RENAME):   retain listvars ;
    MPRINT(RENAME):   Obs+1 ;
    MPRINT(RENAME):   Lettre=byte(64+Obs+1) ;
    MPRINT(RENAME):   listvars= catx( ' ; ', listvars, cat('Rename ', Lettre, ' = ', strip(Variables)) ) ;
    MPRINT(RENAME):   if fin then call symputx('Renames', strip(listvars), 'G');
    MPRINT(RENAME):   run ;
     
    NOTE: There were 25 observations read from the data set WORK.CATALOGUE.
    NOTE: DATA statement used (Total process time):
          real time           0.00 secondes
          cpu time            0.01 secondes
     
     
    93         /* Jeu de données */	
    94         data TabA   ; retain B C D E F G H Y Z 0 ; run ;
     
    NOTE: The data set WORK.TABA has 1 observations and 9 variables.
    3                                                          Le Système SAS                             09:17 Friday, January 25, 2019
     
    NOTE: Compressing data set WORK.TABA increased size by 100.00 percent. 
          Compressed is 2 pages; un-compressed would require 1 pages.
    NOTE: DATA statement used (Total process time):
          real time           0.00 secondes
          cpu time            0.00 secondes
     
     
    95         data RTabA ; set TabA ; &Renames. ; run ;
     
    WARNING: La variable I dans la liste DROP, KEEP, ou RENAME n'a jamais été référencée.
    WARNING: La variable J dans la liste DROP, KEEP, ou RENAME n'a jamais été référencée.
    WARNING: La variable K dans la liste DROP, KEEP, ou RENAME n'a jamais été référencée.
    WARNING: La variable L dans la liste DROP, KEEP, ou RENAME n'a jamais été référencée.
    WARNING: La variable M dans la liste DROP, KEEP, ou RENAME n'a jamais été référencée.
    WARNING: La variable N dans la liste DROP, KEEP, ou RENAME n'a jamais été référencée.
    WARNING: La variable O dans la liste DROP, KEEP, ou RENAME n'a jamais été référencée.
    WARNING: La variable P dans la liste DROP, KEEP, ou RENAME n'a jamais été référencée.
    WARNING: La variable Q dans la liste DROP, KEEP, ou RENAME n'a jamais été référencée.
    WARNING: La variable R dans la liste DROP, KEEP, ou RENAME n'a jamais été référencée.
    WARNING: La variable S dans la liste DROP, KEEP, ou RENAME n'a jamais été référencée.
    WARNING: La variable T dans la liste DROP, KEEP, ou RENAME n'a jamais été référencée.
    WARNING: La variable U dans la liste DROP, KEEP, ou RENAME n'a jamais été référencée.
    WARNING: La variable V dans la liste DROP, KEEP, ou RENAME n'a jamais été référencée.
    WARNING: La variable W dans la liste DROP, KEEP, ou RENAME n'a jamais été référencée.
    WARNING: La variable X dans la liste DROP, KEEP, ou RENAME n'a jamais été référencée.
    NOTE: There were 1 observations read from the data set WORK.TABA.
    NOTE: The data set WORK.RTABA has 1 observations and 9 variables.
    NOTE: Compressing data set WORK.RTABA increased size by 100.00 percent. 
          Compressed is 2 pages; un-compressed would require 1 pages.
    NOTE: DATA statement used (Total process time):
          real time           0.00 secondes
          cpu time            0.00 secondes
     
     
    96         
    97         %Rename(NomFich=BOX, ModaVar=SEGMENT)  ;
    MPRINT(RENAME):   data _null_ ;
    MPRINT(RENAME):   set Catalogue end=fin ;
    MPRINT(RENAME):   length listvars $ 9999 ;
    MPRINT(RENAME):   retain listvars ;
    MPRINT(RENAME):   if variables="SEGMENT" then delete ;
    MPRINT(RENAME):   Obs+1 ;
    MPRINT(RENAME):   Lettre=byte(64+Obs+1) ;
    MPRINT(RENAME):   listvars= catx( ' ; ', listvars, cat('Rename ', Lettre, ' = ', strip(Variables)) ) ;
    MPRINT(RENAME):   if fin then call symputx('Renames', strip(listvars), 'G');
    MPRINT(RENAME):   run ;
     
    NOTE: There were 25 observations read from the data set WORK.CATALOGUE.
    NOTE: DATA statement used (Total process time):
          real time           0.00 secondes
          cpu time            0.00 secondes
     
     
    98         /* Jeu de données */
    99         data TabB ; retain B C D E F G H X Y 0 ; run ;
     
    NOTE: The data set WORK.TABB has 1 observations and 9 variables.
    NOTE: Compressing data set WORK.TABB increased size by 100.00 percent. 
    4                                                          Le Système SAS                             09:17 Friday, January 25, 2019
     
          Compressed is 2 pages; un-compressed would require 1 pages.
    NOTE: DATA statement used (Total process time):
          real time           0.00 secondes
          cpu time            0.00 secondes
     
     
    100        data RTabB ; set TabB ; &Renames. ; run ;
     
    WARNING: La variable I dans la liste DROP, KEEP, ou RENAME n'a jamais été référencée.
    WARNING: La variable J dans la liste DROP, KEEP, ou RENAME n'a jamais été référencée.
    WARNING: La variable K dans la liste DROP, KEEP, ou RENAME n'a jamais été référencée.
    WARNING: La variable L dans la liste DROP, KEEP, ou RENAME n'a jamais été référencée.
    WARNING: La variable M dans la liste DROP, KEEP, ou RENAME n'a jamais été référencée.
    WARNING: La variable N dans la liste DROP, KEEP, ou RENAME n'a jamais été référencée.
    WARNING: La variable O dans la liste DROP, KEEP, ou RENAME n'a jamais été référencée.
    WARNING: La variable P dans la liste DROP, KEEP, ou RENAME n'a jamais été référencée.
    WARNING: La variable Q dans la liste DROP, KEEP, ou RENAME n'a jamais été référencée.
    WARNING: La variable R dans la liste DROP, KEEP, ou RENAME n'a jamais été référencée.
    WARNING: La variable S dans la liste DROP, KEEP, ou RENAME n'a jamais été référencée.
    WARNING: La variable T dans la liste DROP, KEEP, ou RENAME n'a jamais été référencée.
    WARNING: La variable U dans la liste DROP, KEEP, ou RENAME n'a jamais été référencée.
    WARNING: La variable V dans la liste DROP, KEEP, ou RENAME n'a jamais été référencée.
    WARNING: La variable W dans la liste DROP, KEEP, ou RENAME n'a jamais été référencée.
    WARNING: La variable Z dans la liste DROP, KEEP, ou RENAME n'a jamais été référencée.
    NOTE: There were 1 observations read from the data set WORK.TABB.
    NOTE: The data set WORK.RTABB has 1 observations and 9 variables.
    NOTE: Compressing data set WORK.RTABB increased size by 100.00 percent. 
          Compressed is 2 pages; un-compressed would require 1 pages.
    NOTE: DATA statement used (Total process time):
          real time           0.00 secondes
          cpu time            0.01 secondes
     
     
    101        
    102        GOPTIONS NOACCESSIBLE;
    103        %LET _CLIENTTASKLABEL=;
    104        %LET _CLIENTPROJECTPATH=;
    105        %LET _CLIENTPROJECTNAME=;
    106        %LET _SASPROGRAMFILE=;
    107        
    108        ;*';*";*/;quit;run;
    109        ODS _ALL_ CLOSE;
    110        
    111        
    112        QUIT; RUN;
    113
    et voici les tables résultats :

    Nom : catalogue.PNG
Affichages : 580
Taille : 14,4 Ko

    Nom : box.PNG
Affichages : 681
Taille : 55,2 Ko

    Nom : pizzas.PNG
Affichages : 632
Taille : 45,0 Ko

    Nom : tba.PNG
Affichages : 598
Taille : 7,5 Ko

    Nom : rtaba.PNG
Affichages : 604
Taille : 9,0 Ko

    Nom : tbb.PNG
Affichages : 603
Taille : 7,2 Ko

    Nom : rtabb.PNG
Affichages : 667
Taille : 9,1 Ko

    Merci pour votre aide !

  4. #4
    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
    Bonjour,
    regarde la vérification à titre d'exemple :
    1) il faut exécuter la macro programme d'abord qui nous crée la macro variable pour renommer les variable
    2) respecter les paramètres de la macro pour la table à traiter.
    3) le mot fichA est un texte et n'est pas un nom de table. on peut la changer mais sa présence est important pour la macro %IF qui se trouve dans la macro.

    /* Vérification */
    /* Pour la tableA il n' y a pas de suppression de modalité comme votre table PIZZA. Rien à mettre pour modVar */
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    %Rename(NomFich=FichA, ModaVar= )  ; 
     
    /* Jeu de données */	
    data TabA   ; retain B C D E F G H Y Z 0 ; run ; 
     
    data RTabA ; set TabA ; &Renames. ; run ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
                             Obs    B    C    D    E    F    G    H    Y    Z
     
                              1     0    0    0    0    0    0    0    0    0
     
     
      Obs   LIBELLE   SEGMENT   MANUFACTURER   BRAND   GAMME   BASICSIZE   MULTIPACK   DV_N_1   DV_N
     
       1       0         0            0          0       0         0           0          0       0

    /* Ici la modalité SEGMENT doit être supprimer : une modification est nécessaire à l'intérieur de la macro, FichB à
    ajouter et cette condition sera exécuter ==> %if &NomFich.=FichB %then %Do ; if variables="&ModaVar." then delete ; %end ; pour la suppression */
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    %Rename(NomFich=FichB, ModaVar=SEGMENT)  ; 
    /* Jeu de données */ 
    data TabB ; retain B C D E F G H X Y 0 ; run ;
     
    data RTabB ; set TabB ; &Renames. ; run ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
                             Obs    B    C    D    E    F    G    H    X    Y
     
                              1     0    0    0    0    0    0    0    0    0
     
     
     Obs   LIBELLE   MANUFACTURER   BRAND   GAMME   BASICSIZE   MULTIPACK   PACKAGING   DV_N_1   DV_N
     
      1       0            0          0       0         0           0           0          0       0

    ========================================================================
    Pour tes Tables :
    Ici tu peux laisser le mot BOX car cette partie ne sera pas exécuter. pas de suppression de modalité pour la table PIZZA.
    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
    %Macro Rename (NomFich=, ModaVar=);
    data _null_  ;                                                                    
    set Catalogue end=fin ; 
    length  listvars $ 9999 ;                                                     
    retain listvars ;   
    %if &NomFich.= BOX %then %Do ; if variables="&ModaVar." then delete ; %end  ;	 
    Obs+1 ;
    Lettre=byte(64+Obs+1) ; 
    listvars= catx( ' ; ', listvars, cat('Rename ', Lettre, ' = ', strip(Variables)) ) ;
    if fin then call symputx('Renames', strip(listvars), 'G');   
    run ;  	 
    %Mend Rename ;   
     
    %Rename(NomFich=PIZZAS, ModaVar= )  ;
     
    data Final_PIZZAS ; set TaTablePIZZAS  ; &Renames. ; run ;
    Par contre, ici la présence du mot BOX est obligatoire et identique à celui du paramètre de la macro.

    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
     %Macro Rename (NomFich=, ModaVar=);
    data _null_  ;                                                                    
    set Catalogue end=fin ; 
    length  listvars $ 9999 ;                                                     
    retain listvars ;   
    %if &NomFich.= BOX %then %Do ; if variables="&ModaVar." then delete ; %end  ;	 
    Obs+1 ;
    Lettre=byte(64+Obs+1) ; 
    listvars= catx( ' ; ', listvars, cat('Rename ', Lettre, ' = ', strip(Variables)) ) ;
    if fin then call symputx('Renames', strip(listvars), 'G');   
    run ;  	 
    %Mend Rename ;   
     
    %Rename(NomFich=BOX, ModaVar=SEGMENT)  ;
     
    data Final_BOX ; set TaTableBOX  ; &Renames. ; run ;
    On suppose que tu souhaite supprimer la modalité Ventes_UVC_N de la Tatble PIZZA. Voir la modification sur la macro :
    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
    %Macro Rename (NomFich=, ModaVar=);
    data _null_  ;                                                                    
    set Catalogue end=fin ; 
    length  listvars $ 9999 ;                                                     
    retain listvars ;   
    %if &NomFich.= DAZZAS %then %Do ; if variables="&ModaVar." then delete ; %end  ;	 
    Obs+1 ;
    Lettre=byte(64+Obs+1) ; 
    listvars= catx( ' ; ', listvars, cat('Rename ', Lettre, ' = ', strip(Variables)) ) ;
    if fin then call symputx('Renames', strip(listvars), 'G');   
    run ;  	 
    %Mend Rename ;   
     
    %Rename(NomFich=DAZZAS, ModaVar=Ventes_UVC_N )  ;
     
    data Final_PIZZAS ; set TaTablePIZZAS  ; &Renames. ; run ;
    Bon Courage
    Ward

  5. #5
    Membre à l'essai
    Homme Profil pro
    Responsable des études
    Inscrit en
    Août 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable des études

    Informations forums :
    Inscription : Août 2018
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    Merci beaucoup, j'ai mis un peu temps à comprendre

    Mais le résultat est là, ça fonctionne !!

    Merci encore pour ton aide !!


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

Discussions similaires

  1. Importer des fichiers excel et consolider les données
    Par abbado dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 17/04/2018, 20h13
  2. Importation fichier Excel et formats de variables
    Par hrazafim dans le forum SAS Base
    Réponses: 6
    Dernier message: 20/06/2014, 10h21
  3. Réponses: 0
    Dernier message: 11/08/2012, 12h33
  4. Réponses: 2
    Dernier message: 13/11/2007, 14h58

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