Rang de naissance
2 participants
Page 1 sur 1
Rang de naissance
Je cherche à avoir une variable rang de naissance d'un enfant dans un ménage, et je cale sur la manip à adopter. Pour cela j'ai l'âge des enfants et l'identifiant de leur mère. Voilà les variables que j'ai avec un petit exemple. Dans l'exemple j'ai un ménage avec 2 co-épouses ayant chacune des enfants. Ce que je cherche à calculer c'est les 2 dernières colonnes, le rang de naissance de l'enfant dans sa fratrie et dans son ménage.
Voilà si quelqu'un a une manip simple en main, je suis preneuse car là j'ai plutôt tendance à partir dans des choses compliquées et douteuses...
Merci d'avance !!
idmenage | id_ind | idmere | age | rang_fratrie | rang_menage |
1 | 50 | ||||
2 | 45 | ||||
3 | 2 | 16 | 1 | 1 | |
4 | 2 | 10 | 2 | 2 | |
5 | 25 | ||||
6 | 5 | 5 | 1 | 3 | |
7 | 5 | 3 | 2 | 4 | |
8 | 5 | 1 | 3 | 5 |
Voilà si quelqu'un a une manip simple en main, je suis preneuse car là j'ai plutôt tendance à partir dans des choses compliquées et douteuses...
Merci d'avance !!
Marie-Ch- Messages : 77
Date d'inscription : 09/11/2009
Re: Rang de naissance
Bonjour,
Je pense avoir une solution : la variable egen rank permet de générer une variable de rang et fonctionne avec la commande by
je te donne ce que j'ai tapé (il me semble que ça marche) :
pour générer rang_fratrie:
-sort idménage idmere
-by idménage idmere : egen rang_fratrie = rank(age) et éventuellement if id_mère != .
pour générer rang_ménage:
-sort idménage
-by idménage : egen rang_ménage = rank(age) et éventuellement if id_mère != .
ATTENTION à deux choses :
1. l'ordre : le rang 1 est donné au plus jeune et non au plus vieux comme tu l'as demandé, je ne sais pas si c'est grave mais si oui
soit tu crées la variable inverse
soit tu le gardes à l 'esprit dans tes interprétations,...
soit tu mets rank(-age) dans la commande, je n'ai jamais essayé et ne sais pas si ça marche
2. les données . manquantes sont triées et classées du coup il faut penser à les supprimer (un petit if id_mère != .)
J'espère avoir été clair, tiens moi au courant si ça marche et bon courage!!!
Je pense avoir une solution : la variable egen rank permet de générer une variable de rang et fonctionne avec la commande by
je te donne ce que j'ai tapé (il me semble que ça marche) :
pour générer rang_fratrie:
-sort idménage idmere
-by idménage idmere : egen rang_fratrie = rank(age) et éventuellement if id_mère != .
pour générer rang_ménage:
-sort idménage
-by idménage : egen rang_ménage = rank(age) et éventuellement if id_mère != .
ATTENTION à deux choses :
1. l'ordre : le rang 1 est donné au plus jeune et non au plus vieux comme tu l'as demandé, je ne sais pas si c'est grave mais si oui
soit tu crées la variable inverse
soit tu le gardes à l 'esprit dans tes interprétations,...
soit tu mets rank(-age) dans la commande, je n'ai jamais essayé et ne sais pas si ça marche
2. les données . manquantes sont triées et classées du coup il faut penser à les supprimer (un petit if id_mère != .)
J'espère avoir été clair, tiens moi au courant si ça marche et bon courage!!!
catherine- Messages : 64
Date d'inscription : 18/11/2009
Age : 37
Localisation : Clermont-Ferrand
Re: Rang de naissance
Merci de ta réponse. Je pense en effet que ta solution fonctionne. Ça paraît assez logique que rank serve à déterminer le rang à vrai dire.... Mais ce qui est bien avec stata c'est qu'il y a toujours plusieurs bricolages pour un même résultat (de là à dire que tous les chemins mènent à Rome...);
Sinon voilà comment je m'en suis sortie pour le rang de naissance de la même mère.
gsort idmenage idmere -age
by idmenage idmere : gen rang_fratrie=_n
Du coup j'ai aussi fait la même chose pour le rang de naissance du même père, et pour le rang dans le ménage.
Voilà qui m'a donné l'occasion de faire connaissance avec gsort qui lorsqu'on lui associe une variable avec un + devant (ou rien comme ici) trie par ordre croissant, et trie par ordre décroissant avec un - devant la variable.
Comme dis précédemment il faut faire attention aux données manquantes, en effet un age==. sera considéré comme le plus jeune de la fratrie.
Sinon voilà comment je m'en suis sortie pour le rang de naissance de la même mère.
gsort idmenage idmere -age
by idmenage idmere : gen rang_fratrie=_n
Du coup j'ai aussi fait la même chose pour le rang de naissance du même père, et pour le rang dans le ménage.
Voilà qui m'a donné l'occasion de faire connaissance avec gsort qui lorsqu'on lui associe une variable avec un + devant (ou rien comme ici) trie par ordre croissant, et trie par ordre décroissant avec un - devant la variable.
Comme dis précédemment il faut faire attention aux données manquantes, en effet un age==. sera considéré comme le plus jeune de la fratrie.
Marie-Ch- Messages : 77
Date d'inscription : 09/11/2009
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|