我有一个面板数据集,个人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示例,我只需要前三位数。
答案 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 |
+-----------------------------+