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

  1. #1
    Membre à l'essai
    Femme Profil pro
    Data manager
    Inscrit en
    mars 2019
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Data manager
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : mars 2019
    Messages : 17
    Points : 14
    Points
    14

    Par défaut Créer une macro variable pour chaque modalité

    Bonjour,

    j'ai ma macro ci-dessous qui ne marche et je ne sais pas pourquoi

    c'est une macro qui est censé récupéré la sortie d'une proc freq et compter le nombre de modalités de la variable puis créer une macro variable pour chaque modalité puis diviser la base selon chaque modalité mais la dernière partie ne marche pas et je ne sais pas pourquoi.
    Je fais tout cela car il y a une autre partie du code que je dois tester après. je sais que la création de la macro variable avec le %scan ne marche pas dans mon code

    Ci-dessous mon 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    %macro test ; 
    %do i=1 %to 3 ; 
    data praxedo_A;
    set praxedo_A;
    test&i=substr(n&i,1,3);
    run; 
    PROC FREQ DATA=user.praxedo_A  ;
    	TABLE test&i / out=cardinalites&i  NOPRINT ;
    RUN ; 
    proc sql ;
    select distinct test&i into :NBVAL&i SEPARATED BY ","
    from cardinalites&i ;
    quit;
    data _null_; 
    set cardinalites&i nobs=nobs&i ; 
    call symput ("nbobs&i",nobs&i); 
    run; 
    %do j=1 %to &nbobs&i ;
    %let varmots&j=%scan("NBVAL&i",&j,",");
    data prax_A_&j restant;
    set praxedo_A ; 
    if index(test&i,"varmots&j")=1 then output prax_A_&j;
    else output praxedo_A_2; 
    run ; 
    %end;
    %mend;
    %test;
    Je vous remercie pour votre aide

    cdt,

  2. #2
    Membre éprouvé
    Inscrit en
    novembre 2009
    Messages
    488
    Détails du profil
    Informations forums :
    Inscription : novembre 2009
    Messages : 488
    Points : 978
    Points
    978

    Par défaut Séparer table SAS selon différentes modalités d'une variable

    Bonjour,

    Je vous conseille la discussion Séparer table SAS selon différentes valeurs d'une variable.

    Cordialement,

    PS : Pensez à utiliser les balises CODE pour faciliter la lecture.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Data manager
    Inscrit en
    mars 2019
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Data manager
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : mars 2019
    Messages : 17
    Points : 14
    Points
    14

    Par défaut

    Citation Envoyé par mgdondon Voir le message
    Bonjour,

    Je vous conseille la discussion Séparer table SAS selon différentes valeurs d'une variable.

    Cordialement,

    PS : Pensez à utiliser les balises CODE pour faciliter la lecture.
    Bonjour, Merci pour l'info je vais regarder

    Cordialement,

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    février 2005
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2005
    Messages : 132
    Points : 118
    Points
    118

    Par défaut

    Bonjour,
    Le code présente quelques erreurs :
    - il manque un %end (pour la boucle en j)
    - il manque un && dans l'utilisation de la macros-variable varmots&j
    D'autre part, je ne vois pas l'intérêt de la table RESTANT puisque, notamment, elle est écrasée lorsque l'indice i est incrémenté et la table finale prax_A_&j. doit être, me semble-t-il, également indicée par i : prax_A_&i._&j. (pour la même raison d'écrasement)

    Voici le code qui en résulte :

    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
     
    %macro test ; 
     
    	%do i=1 %to 3 ;
     
    		data praxedo_A;	set praxedo_A;test&i=substr(n&i,1,3);run; 
    		PROC FREQ DATA=praxedo_A;TABLE test&i / out=cardinalites&i  NOPRINT ;RUN ; 
    		proc sql ;
    			select distinct test&i into :NBVAL&i SEPARATED BY ","
    			from cardinalites&i ;
    		quit;
    		data _null_; set cardinalites&i nobs=nobs&i; call symput("nbobs&i",nobs&i); run; 		
     
    		%do j=1 %to &&nbobs&i ;
    			%let varmots&j=%scan("&&NBVAL&i",&j,",");			
    			data prax_A_&i._&j.; set praxedo_A ; 
    				if index(test&i,"&&varmots&j")=1 then output ;				
    			run ; 
    		%end;
     
    	%end;
    %mend;
    %test;

Discussions similaires

  1. Réponses: 40
    Dernier message: 04/11/2016, 17h28
  2. Créer une macro-variable dans un rsubmit
    Par joyeux_lapin13 dans le forum Administration et Installation
    Réponses: 14
    Dernier message: 27/06/2011, 13h06
  3. Réponses: 3
    Dernier message: 29/04/2011, 17h02
  4. Réponses: 4
    Dernier message: 14/12/2009, 12h53
  5. Réponses: 4
    Dernier message: 05/06/2008, 17h33

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