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 :

Créer une macro variable pour chaque modalité


Sujet :

Macro

  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 : 38
    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 expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    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 : 38
    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 habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 209
    Points : 145
    Points
    145
    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, 18h28
  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, 14h06
  3. Réponses: 3
    Dernier message: 29/04/2011, 18h02
  4. Réponses: 4
    Dernier message: 14/12/2009, 13h53
  5. [Spip] créer une page php pour chaque enregistrement ajouté à la base
    Par ecdxml dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 05/06/2008, 18h33

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