Bonjour,
J'ai une table avec une seule variable en format caractère. Une correspondance me donne la position des variables qui m'intéressent dans cette chaîne.
Exemple :
Les 8 premiers caractères me donnent la date, les 3 suivants le nombre de personnes présentes à la réunion, les 4 suivants les premières lettres du prénom, le suivant le sexe et les 3 suivants l'âge. Je peux donc récupérer facilement les informations :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 data t1; input var: $100.; cards; 20150102001MarcM019 20150109001GaelF031 ; run;
Par contre certaines données peuvent être répétées dans cette chaîne donc toutes les informations suivantes sont forcément "décalées" :
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 data t2; set t1; format reuniondate ddmmyy10.; reuniondate=mdy(substr(var, 5, 2), substr(var, 7, 2), substr(var, 1, 4)); format reunionnb 3.; reunionnb=substr(var, 9, 3); prenom=substr(var, 12, 4); sexe=substr(var, 16, 1); format age 3.; age=substr(var, 17, 3); run;
Pour le 3e enregistrement, la valeur retrouvée nbreunion m'indique qu'il y a désormais 2 personnes : compte tenu de ce paramètre je peux identifier sans problème la position des informations qui m'intéressent dans la suite de la chaîne. J'ai essayé d'utiliser une boucle do/end pour pouvoir créer un certain nombre de variables (par exemple prenom1 à prenomX où X est la valeur identifiée en récupérant ma valeur reunionnb), mais j'ai deux soucis :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 data t1; input var: $100.; cards; 20150102001MarcM019 20150109001GaelF031 20150116002MarcPaulMM019082 20150123003MarcPaulGaelMMF019082031 ; run;
- Je n'arrive pas à utiliser la valeur d'une variable dans ma boucle
- Je n'arrive pas à utilise mon paramètre "i" allant de 1 à X dans la boucle
Voici mon exemple qui ne marche pas :
J'utilise peu les boucles et je ne suis pas très à l'aise avec ces codes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 data t2; set t1; format reuniondate ddmmyy10.; format reunionnb 3.; reunionnb=substr(var, 9, 3); do i=1 to reunionnb; format prenom_i $4.; format age_i 3.; format sexe_i $1.; end; run;(je ne sais pas trop s'il faut utiliser &i ou i dans la boucle... mais ni l'un ni l'autre ne fonctionne) J'ai aussi tenté de faire la boucle avec une macro (les quelques boucles que j'ai utilisées il me semblait que ça marchait en macro mais pas forcément dans une étape data...).
A partir du moment où je saurais utiliser mon "i" et mon "reunionnb" à l'intérieur de la boucle je pourrais récupérer toutes les informations qui m'intéressent. Je suppose que la réponse est simple mais pour l'instant je suis bloqué...
Suis-je parti dans la bonne voie ? Savez-vous comment je peux m'en sortir facilement avec ce bout de code dans une boucle do/end ?
Partager