专栏名称: 爬虫俱乐部
Stata技术控,编程技术咨询,数据讨论与分享,编程和实证培训。
目录
相关文章推荐
精准药物  ·  2025年5月国内外抗肿瘤药物获批情况一览, ... ·  12 小时前  
云南药品监管  ·  药物警戒快讯(2025年第3期) ·  2 天前  
51好读  ›  专栏  ›  爬虫俱乐部

有问必答——匹配问题

爬虫俱乐部  · 公众号  ·  · 2018-07-16 14:54

正文

请到「今天看啥」查看全文


postname :定义一个post的名称。

newvarlist :定义输出变量的名称,可以是数值型,也可以是字符型。

filename :指定输出结果的位置。

replace :代替已有同名文件。

post :输出结果。

postclose :结束整个post过程。

我们可以把这整个使用过程当作一个 邮件寄送的过程 ,首先定义一个邮件系统的名称(postname),其次,指定需要邮寄的信息(newvarlist)和收信位置(filename),然后,邮寄出指定的内容(post),最后结束邮递过程(postclose)。

接下来我们开始进行匹配工作。首先,用以下命令行对原始数据进行转码:

clear
cd E:\直播课程\qq群问答
unicode encoding set gb18030
unicode translate " 2018uf原始数据.dta", transutf8 invalid
unicode erasebackups, badidea

其次,建立循环匹配出我们需要的数值并输出。

use 2018uf原始数据.dta, clear
capture postclose mypost
postfile mypost  long pid  ///
 long pid_f  long income  ///
using  mypost.dta, replace
forvalues i = 1 (1)`=_N'{                 // 对pid变量下的每个身份代码进行循环
    forvalues  j = 1/ `=_N'{                 // 对pid_f变量的每个身份代码进行循环
          while pid[`i'] == pid_f[`j']{         // 判断个人身份代码是否匹配其“爹“的身份代码
              post mypost  (pid[`i'])  (pid_f[`j'])  (income[`j'])   // 输出符合判断语句的观测值
           continue, break
               }  
    } 
}
postclose mypost
use mypost.dta,clear
br  in  1/10

结果如下图所示:

在上述循环过程中,由于pid下的每一个身份代码都要和pid_f下的每个身份代码相匹配,即要循环n*n次(n为样本值),如果样本值很大的话,这无疑会耗费大量时间。下面介绍另外一种方法。

2、merge 合并法

利用merge命令,先保留一份个人身份代码(pid),然后再保留一份pid_f的身份代码及其相对应的收入(income),最后利用merge将二者合并保留完全匹配的数据。

代码如下:

use 2018






请到「今天看啥」查看全文