Bonjour,
Je commence récemment à coder avec des macros et des macros variables sous SAS 9.4 .
J'ai fait pas mal de recherche sur la création des macros variable mais je peine sur la création dynamique des macros variables je m'explique :
Je veux créer une macro qui ajoute une ligne vide pour chaque changement de modalité d'une variable
Le but étant de faciliter la mise en forme des données sous excel avec une formule qui affiche les données sur la feuille INFOS depuis la table exportée sur la feuille DATA
Exemple : INFOS!D4 =SI(OU(DATA!D4="";DATA!A4=0;DATA!D4=".");"";DATA!D4)
Les seules informations que je passe à la macros sont : le nom de la table et la variable choisie pour faire les ajouts de ligne vide
Voici la macro tel qu'elle existe
Code sas : 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 %macro mise_en_forme_automatise_profil(BASE=, VAR_AJOUT_LIG=); proc sql ; create table &BASE as select * from &BASE order by &VAR_AJOUT_LIG ;quit; proc sql noprint ; select count(distinct &VAR_AJOUT_LIG) into: nb_ajout from &BASE;quit; proc sql noprint ; select distinct &VAR_AJOUT_LIG into: nom_modal_1-:nom_modal_50 from &BASE;quit; proc datasets lib=work memtype=data nolist;delete MISE_FORME_&BASE;run; %do i = 1 %to &nb_ajout; proc sql; create table modal_&i as select * from &BASE where &VAR_AJOUT_LIG = "&&nom_modal_&i"; quit; DATA modal_&i;SET modal_&i END=fin ; OUTPUT ; IF fin THEN DO ; CALL MISSING(OF _ALL_) ; OUTPUT ; END ; RUN ; %IF %sysfunc(exist(MISE_FORME_&BASE)) ne 1 %then %do; data MISE_FORME_&BASE; set modal_&i; run;%end; %else %do; data MISE_FORME_&BASE;set MISE_FORME_&BASE modal_&i;run; %end; proc datasets lib=work memtype=data nolist;delete modal_&i;run; %end; %mend mise_en_forme_automatise_profil;
Ce que je voudrait savoir c'est comment on peut remplacer "nom_modal_50" du code "into: nom_modal_1-:nom_modal_50" par "nom_modal_&nb_ajout" ?
Même si je fixe un "nom_modal_999" pour être tranquille, je préfère trouver une solution qui adapte le nombre de macro variable à créer, une solution plus "propre".
Merci de votre attention !
Partager