2009-10-10 30 views
2

Disons que j'ai un jeu de données Stata qui a deux variables: type et price. La valeur type pour chaque observation est un nombre compris entre 1 et 10.Prendre une moyenne conditionnelle dans Stata

Je veux ajouter une troisième valeur qui est la moyenne price de toutes les variables de cette type. Ainsi, par exemple, si la première observation avait un type de 3 et un price de 10, alors je voudrais ajouter une troisième valeur qui est la moyenne price de toutes les observations avec type = 3.

Comment puis-je faire cela dans Stata?

Répondre

1

Il y a probablement quelques façons de le faire mais c'est ce que je suggère.

gen newvar = . 
forvalues i = 1/10 { 

    qui sum price if type == `i', meanonly 
    replace newvar = r(mean) if type == `i' 

}

6

est ici une approche différente qui est plus simple et efficace. Si vous avez un grand ensemble de données, ce sera plus rapide que la boucle multi-étapes suggérée par aTron et cette approche s'adapte aux changements dans la portée de votre variable "type" (si votre jeu de données change de taille, vous n'avez pas à revenez dans votre code et modifiez la plage dans la commande forvalues).

1) Créer un jeu de données faux

clear 
input type price 
1 1000 
2 3200 
3 5000 
4 1200 
5 1000 
1 4000 
2 2000 
3 4000 
4 1200 
5 2000 
end 

2) Générez le price moyen par type

bysort type: egen meanprice = mean(price) 

li type price meanprice, sepby(type) 
+0

"gen NouvelleVar =." est manquant avant la boucle forvalues ​​ – emeryville

+0

Ensuite, je ne comprends pas pourquoi cette boucle est ajoutée car elle duplique simplement la variable 'meanprice'. Ai-je manqué quelque chose d'important? – emeryville

+0

@emeryville Vous n'avez rien manqué d'important. La dernière section est au mieux redondante et au pire assez trompeuse. Je ne me suis pas remarqué quand j'ai touché à cette question pour la dernière fois, mais je l'ai édité maintenant. –

1

Vous pouvez créer les moyens avec

by type: egen conditional_mean = mean(price) 
+0

Redondant - c'est la même chose que la réponse d'Eric. – Keith