Stata 如何将带有空格的姓氏提取为“一个”名称/“整体”?

Stata 如何将带有空格的姓氏提取为“一个”名称/“整体”?,stata,spaces,names,Stata,Spaces,Names,有谁能建议一种方法,将带有空格的姓氏提取为一组名字 数据集中的名称如下所示 clear input str40 name "R. P. de la Espriella Guerrero" "J. de Carvalho Ponce" "E. De Freitas Drumond" "R. de la Fuente and M. E. Medi

有谁能建议一种方法,将带有空格的姓氏提取为一组名字

数据集中的名称如下所示

clear
input str40 name
"R. P. de la Espriella Guerrero"          
"J. de Carvalho Ponce"                 
"E. De Freitas Drumond"                
"R. de la Fuente and M. E. Medina-Mora"
"C. Van Heyningen and I. D. Watson"
"A. Z. van de Wiel and D. W. de Lange"
end
我只想要第一个姓氏,所以只有第一个作者,不包括其他作者,但我希望那些有空格的名字被“整体”提取出来。因此,最终生成如下数据集,例如:

clear
input str40 name
"de la Espriella Guerrero"          
"de Carvalho Ponce"                 
"De Freitas Drumond"               
"de la Fuente"
"Van Heyningen"
"van de Wiel"
end

我将非常感谢您的帮助。

以下是实现上述评论中给出的两条规则的代码。它假定使用的Stata版本支持unicode字符串函数

clear
input str40 name
"R. P. de la Espriella Guerrero"          
"J. de Carvalho Ponce"                 
"E. De Freitas Drumond"                
"R. de la Fuente and M. E. Medina-Mora"
"C. Van Heyningen and I. D. Watson"
"A. Z. van de Wiel and D. W. de Lange"
end
generate surname = name
replace surname = usubstr(surname,1,ustrpos(surname+" and "," and ")-1)
list, clean noobs
replace surname = usubstr(surname,ustrrpos(surname,". ")+1,.)
list, clean noobs

你如何决定和是否是名字的一部分?谢谢@bew。不幸的是,这是困难的一部分。“和”后面跟一个空格,然后是另一个名称,以首字母大写的缩写开头,例如和D.W.de Lange。多名称粒子也可以大写,例如de,Du等。您首先定义规则,选择要删除的文本和要保留的文本。然后可以建议实现这些规则的代码。你把规则留给我们想象。在我看来,你要应用的规则是,首先,删除从“和”开始的所有内容,然后删除从开始到最右边的所有内容以及其后的空格。剩下的是第一个姓氏。这似乎适用于您的六个样本,但它是否适用于您的整个数据集,我们无法判断。谢谢。似乎能胜任这项工作。刚刚注意到第二个篡位者在姓氏前产生了一个空格。所以我稍微修改了一下,以替换姓氏=usubstrurname,ustrpossurname+2.我不完全清楚为什么会发生这种情况,因为起始位置已经指定为。i、 e.带空格/空白的挡块。乌斯特罗斯治疗。和同样吗?另外,为了教育的缘故,请你告诉我现在的情况。在第二个篡位者那里?i、 在篡位者中,n1,n2是什么。你呢?接得好。事实上,USTROPSURNAME,。返回中第一个字符的位置。因此,添加1而不是2是我的疏忽。对于第二个问题,我鼓励您查看help usubstr的输出-Stata的在线帮助应该是此类问题的第一站,因此此回答旨在鼓励您更加熟悉它。注意:此解决方案仅适用于1-2篇作者论文。对于多个作者,需要执行删除非第一作者的步骤:例如,替换姓氏=usubstrurname,1,ustpossurname+和-1列表,清除noobs替换姓氏=usubstrurname,1,ustpossurname+,-1列表,清除noobs替换姓氏=usubstrurname,ustrpsurname+1.清单,清洁的角落