Stata 不止一次地计算名字和姓氏

Stata 不止一次地计算名字和姓氏,stata,Stata,我的名字如下: clear input str25 names "Trenton Mercer" "Carissa Moyer" "Timothy Delgado" "Kaylynn Payne" "Harry Patton" "Charlie Dudley" "Harry Schmitt" "Wyatt Hammond" "Kasen Delgado" "Katherine Noble" "Julius Jarvis" "Harry Carney" "Wyatt Holden" "Megan

我的名字如下:

clear
input str25 names
"Trenton Mercer"
"Carissa Moyer"
"Timothy Delgado"
"Kaylynn Payne"
"Harry Patton"
"Charlie Dudley"
"Harry Schmitt"
"Wyatt Hammond"
"Kasen Delgado"
"Katherine Noble"
"Julius Jarvis"
"Harry Carney"
"Wyatt Holden"
"Megan Wilson"
"Priscilla Shaffer"
"Savanah Marshall"
"Harry Delgado"
"Harper Ballard"
"Harry Mcmahon"
"Alejandro Jarvis"
end
我如何识别哪些名字和姓氏(分别)出现了不止一次

我还想计算一下它们出现了多少次。

Pearly的解决方案(将
拆分
作为该问题的最佳选择)似乎是合理的。但仍有一些不必要的轮廓。例如,生成tag、b1、b2变量似乎并不是真的需要

更重要的是,最终的输出并不完全一致,计数信息只是按照看似随机的顺序排列,这也不同于没有明确解释的原始顺序

因此,我尝试提供一个解决方案(也必须有缺陷),这是一种避免这些问题的方法,同时仍然提供您所寻求的输出

split names

foreach v in `r(varlist)' {
    egen TotalAppear_`v' = total(`v' != ""), by(`v')
    egen LastAppear_`v' = max(_n), by(`v')
    replace LastAppear_`v' = LastAppear_`v'==_n
    list `v' TotalAppear_`v' if LastAppear_`v' == 1 & TotalAppear_`v' >1
} 
需要注意的是,您的描述导致了我的代码以及Pearly的解决方案中的假设:

  • 每个名字只有两部分,即名字和姓氏,因此不包括任何中间名

  • 您只想在每个组内进行比较(名字中的每个名字,姓氏中的每个名字),而不是将任何一个与另一个组中的名字进行比较


谢谢您的帮助,但我真的不明白您在做什么按照Pearly解决方案中的明确说明,我添加了
列表
命令以给出视觉输出。再试一次我的代码,看看它是否能带来任何帮助。请注意,Pearly的解决方案是一个很好的解决方案,两种解决方案都能为您所需的信息提供正确的视觉输出,尽管它们在实际(输出)数据上存在差异。@user11552543她实际上在做同样的事情。这是一个很好的例子,其中较短的代码不一定是最透明的,这就是为什么在这里我通常更喜欢显示额外的步骤,很少提倡单线解决方案。Romalpa正确地认为这三个变量不是必需的,但在计算上,您可能不会获得太多,因为当使用
by()
选项时,
total()
egen
函数在引擎盖下做了几乎相同的事情。关于最终输出,什么样的方法是最好的将取决于你以后到底想做什么。有些事你没有告诉我们。在多个场景中,将相关的观察结果放在单独的变量中,而其余的变量丢失,这可能是有利的,尤其是当您想要导出结果时。最后,我也同意Romalpa对回答您的问题需要做的隐含假设的描述,我对您的问题进行了编辑,以更清楚地了解这一点。阅读本文是一个好主意,这样您可以在将来改进您的问题。