Bonjour à tous et merci d'avance à ceux qui prendront le temps de me lire ;-)
Je commence à m'initier aux macros sur SAS (je suis encore novice en la matière). J'essaie de m'autoformer comme je peux mais là je me retrouve face à une difficulté que je n'arrive pas à surmonter.
Pour ce qui est du contexte, je dispose d'une table regroupant les caractéristiques d'une population hétérogène. Je m'intéresse à une variable (Type) mesurée à 4 âges différents: à 25 ans, à 40ans, à 50 ans et à 60 ans. A partir de la base originale, j'ai crée une nouvelle base (à l'aide d'une macro) avec les identifiants des sujets dans la 1ère colonne et les années croissantes pour les autres colonnes (de l'année des 25 ans du plus vieux sujet à la date de fin du recueil):
ID - Type1950 - Type1951 - Type1953 - .... - Type2009 - Type2010
1
2
3
...
Pour chaque sujet, j'ai assigné la valeur de la variable aux 4 ages aux années correspondantes, ce qui fait que j'ai désormais au maximum 4 observations par lignes (et des cases vides pour les autres années).
Je souhaiterais créer une macro qui me permette de répondre à la condition suivante: si la variable pour l'année des 25 ans = variable pour l'année des 40 ans, alors attribuer la même valeur à l'année des 26, 27,...,38 et 39 ans.
J'ai tenté de créer une 1ère macro mais hélas sans succès:
J'imagine que ce sont les passages entre parenthèse qui ne sont pas tolérés...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 %macro create2540(table); %local i; %do i=1950 %to 2010 %by 1; data &table; set &table; %if Type&i ne . and Type&i=Type(&i+15) %then Type(&i+1)=Type(&i+2)=Type(&i+3)=Type(&i+4)=Type(&i+5)=Type(&i+6)=Type(&i+7)=Type(&i+8)=Type(&i+9)=Type(&i+10)=Type(&i+11)=Type(&i+12)=Type(&i+13)=Type(&i+14)=Type&i; run; %end; %mend create2540;
L'autre option que j'envisageais était de faire une macro avec une double boucle mais je me retrouve confronté au même problème (= à la même erreur):
Est-ce que je suis complètement à côté de la plaque?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 %macro create2540(table); %local i j; %do i=1950 %to 2010 %by 1; %do j=1 %to 14 %by 1; data &table; set &table; %if Type&i ne . and Type&i=Type(&i+15) %then Type(&i+&j)=Type&i; run; %end; %mend create2540;
Merci!
Partager