如何在Stata/Excel中筛选发明家流动数据:仅保留旧企业最后专利与新企业首条专利记录
保留发明家跳槽前后关键专利记录的Stata与Excel实现方案
针对你需要保留每位发明家原企业最后一条专利记录和新企业第一条专利记录的需求,我整理了Stata和Excel两种工具的具体实现步骤,完全适配你给出的示例场景:
Stata实现方案
核心思路是先按时间逻辑排序,标记出每个发明家的企业变更顺序,再精准定位需要保留的关键记录:
- 先对数据按「发明家ID」和「年份」排序,确保时间顺序正确:
sort inventor_id year
- 生成企业顺序标识,区分原企业(标记为1)和新企业(标记为2):
bysort inventor_id: gen firm_order = sum(firm != firm[_n-1]) replace firm_order = firm_order + 1 if _n == 1 // 给第一个发明家的第一条记录补全初始顺序
- 标记需要保留的目标记录:
bysort inventor_id firm_order: gen keep_flag = 0 // 保留原企业的最后一条,以及新企业的第一条 bysort inventor_id firm_order: replace keep_flag = 1 if (_n == _N & firm_order == 1) | (_n == 1 & firm_order == 2)
- 筛选并清理数据:
keep if keep_flag == 1 drop firm_order keep_flag
注:如果数据中存在多次跳槽的发明家,只需调整
firm_order的判断条件(比如保留每个firm_order组的最后一条和下一组的第一条)即可适配。
Excel实现方案
用辅助列标记关键记录,操作更直观易上手:
排序数据:选中所有数据区域,点击「数据」选项卡→「排序」,主关键字选「发明家ID」(升序),次关键字选「年份」(升序),确保记录按时间顺序排列。
生成「企业顺序」辅助列(假设发明家ID在A列,企业名称在B列,辅助列放在D列):
- 在D2单元格输入公式:
=IF(A2=A1,IF(B2=B1,D1,D1+1),1) - 下拉填充整列,这个公式会给每个发明家的不同企业分配顺序(原企业=1,新企业=2)。
- 在D2单元格输入公式:
生成「保留标记」辅助列(放在E列):
- 在E2单元格输入公式:
=IF(D2=1,IF(AND(A2=A3,D2<>D3),1,0),IF(D2=2,IF(AND(A2=A1,D2<>D1),1,0),0)) - 下拉填充整列,标记为
1的就是需要保留的原企业最后一条、新企业第一条记录。
- 在E2单元格输入公式:
筛选保留目标记录:选中E列,点击「数据」→「筛选」,只勾选「1」,然后可以复制筛选后的记录到新工作表,或者直接删除标记为
0的行。
内容的提问来源于stack exchange,提问作者user2089724
相关产品推荐
相关产品推荐

