如何识别数字变量中的前三位数

时间:2017-10-31 10:13:42

标签: stata

我有一个面板数据集,个人ID的前三位数字包含一些区域信息。即相同的前三位数字表示该个人属于同一组。

我想单独提取三个数字来创建一个区域假人,但我不知道该怎么做。网上有一些参考文献,但它们是关于从字符串变量中提取信息,但我的是long %10.0g。另外,根据我在网上找到的,前两位数字可以用floor()提取,但我不知道如何处理三位数。

我的ID系列每个包含7个数字,我只需要前3个数字。

更新

* Example generated by -dataex-. To install: ssc install dataex
clear
input long schid
3025408
3304332
3305402
3414787
3414790
3514026
8004138
8154069
8314181
8715408
8734501
8914107
8934501
8944425
9084153
9084163
9084170
9195410
9284094
9334451
end

这是随机挑选的ID示例,我只需要前三位数。

1 个答案:

答案 0 :(得分:2)

在您的情况下,

floor()仍然是一个很好的答案。考虑

. clear

. set obs 1
number of observations (_N) was 0, now 1

. gen long exampleid = 123456789

. gen first3 = floor(exampleid/1e6)

1e6 e表示权力为10;它不是数字e = 2.71828到5 d.p ..所以1e6是10的幂6,或1百万= 1,000,000。

您也可以通过字符串操作来完成此操作,但我不建议使用此方法。通过省略格式参数,更容易出错。

. gen First3 = real(substr(string(exampleid, "%9.0f"), 1, 3))

表明两种方法都有效:

. list 

     +-----------------------------+
     | exampleid   first3   First3 |
     |-----------------------------|
  1. | 123456789      123      123 |
     +-----------------------------+