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
    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é
    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
    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é
    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;

###raw>template_hook.ano_emploi###