En supposant que je dispose de l'ensemble de données suivant comme exemple de jouet:
Country Population_1 Population_2 United States of America 3999 3447 Afghanistan 544 727 Belgium 7546 992 China 10000 12000
Je souhaite réduire l'ensemble de données afin qu'il n'y ait qu'une seule valeur unique pour le pays.
Mon L'ensemble de données final doit ressembler à ceci:
clear input str32 Country Population_1 Population_2 "United States of America" 3999 . "United States of America" . 3447 "Afghanistan" 544 . "Afghanistan" . 727 "Belgium" 7546 . "Belgium" . 992 "China" 10000 . "China" . 12000 end
J'ai essayé d'utiliser la commande collapse
mais je n'ai pas obtenu le résultat attendu. La commande duplicates drop
ne fonctionne pas non plus, car elle n'obtient pas les observations de Population_2
.
3 Réponses :
Ce qui suit fonctionne pour moi:
generate Population_ = . by Country, sort: replace Population_ = Population_2 if Population_1 == . by Country, sort: replace Population_ = Population_1 if Population_2 == . by Country: generate time = _n drop Population_1 Population_2 reshape wide Population_, i(Country) j(time)
Cela fonctionne pour moi:
collapse Pop*, by(Country) list, abbreviate(12) +--------------------------------------------------------+ | Country Population_1 Population_2 | |--------------------------------------------------------| 1. | Afghanistan 544 727 | 2. | Belgium 7546 992 | 3. | China 10000 12000 | 4. | United States of America 3999 3447 | +--------------------------------------------------------+
La commande contribuée par la communauté gcollapse
peut également conserver les variables souhaitées dans l'ensemble de données:
gcollapse (sum) Pop*, merge replace by(Country) duplicates drop Country, force
Ceci est une réponse à une question différente.
c'était ma question initiale - mon ensemble de données d'origine contient de nombreuses autres variables que je souhaite conserver et que je souhaite uniquement réduire
les variables de population. Dois-je créer une nouvelle question?
C'est peut-être dans votre esprit, mais nous ne le savons pas et vous n'avez pas modifié la question d'origine. Plus important encore, un collapse
de certaines variables mais pas d'autres n'a aucun sens. Si une variable est numériquement constante dans (disons) des pays, sa valeur constante sera la moyenne de collapse
; si les valeurs distinctes d'une variable chaîne sont utiles ou intéressantes, elles appartiennent à by ()
. En tant qu'auteur original de doublons
, je visualise avec alarme et sans approbation l'utilisation de l'option force
ici sans justification; comme dans le reste de la vie, la force est au mieux le dernier recours des désespérés.
@NickCox fait un bon point. Notez que vous pouvez également faire de même avec quelques lignes de code supplémentaires et en utilisant uniquement les commandes intégrées.
au lieu de l'option force
, est-il sage de simplement utiliser: drop if missing (City)