导入带有长度分隔符

时间:2018-06-03 20:36:05

标签: import stata delimiter delimited-text

我有一个文本文件,其中只包含数字。

例如:

2001 31110
199910 311

其布局可以解释如下:

1~4th numbers : Year
5~6th numbers : Month
7~8th numbers : Day
9th number : Sex
10th number : Married

但是,我无法决定如何将此文件导入Stata。

例如,如果我使用命令:

import delimited input.txt, delimiter(??)

我应该在delimiter写一下什么?

我不一定需要使用上述内容。我只是想用任何方法导入数据。

1 个答案:

答案 0 :(得分:2)

答案取决于您以后要对数据执行的操作。

我的理解是空格表示与日期相关的数字的单个数字,而在文本文件中,只有月​​份或日期可以是单个数字,但不能同时为两个。此外,sexmarried是二进制指标,其值为01

假设上述内容正确且以下数据包含在文件data.txt中:

2001 31110
199910 311
1983 41201
2012121500

以下是一种方法:

clear 
import delimited data.txt, delimiter(" ") stringcols(_all)  

list

     +--------------------+
     |         v1      v2 |
     |--------------------|
  1. |       2001   31110 |
  2. |     199910     311 |
  3. |       1983   41201 |
  4. | 2012121500         |
     +--------------------+

replace v2 = "0" + v2 if v2 != ""
generate v3 = v1 + v2

generate year = substr(v3, 1, 4)
generate month = substr(v3, 5, 2)
generate day = substr(v3, 7, 2)

generate date = substr(v3, 1, 8)

generate sex = substr(v3, 9, 1)
generate married = substr(v3, 10, 1)

list
     +----------------------------------------------------------------------------------+
     |         v1       v2           v3   year   month   day       date   sex   married |
     |----------------------------------------------------------------------------------|
  1. |       2001   031110   2001031110   2001      03    11   20010311     1         0 |
  2. |     199910     0311   1999100311   1999      10    03   19991003     1         1 |
  3. |       1983   041201   1983041201   1983      04    12   19830412     0         1 |
  4. | 2012121500            2012121500   2012      12    15   20121215     0         0 |
     +----------------------------------------------------------------------------------+

您基本上导入最多两个字符串变量的所有内容,其中一个空格" "充当分隔符。通过在前面添加0,将单个数字的月份或天数更改为两位数。然后,在使用substr()函数提取字符串的相关部分后,您可以根据需要将结果变量简单地转换为数字。

例如:

destring year month day sex married, replace

generate date2 = daily(date, "YMD")
format date2 %tdDD-NN-CCYY

. list date2 

     +------------+
     |      date2 |
     |------------|
  1. | 11-03-2001 |
  2. | 03-10-1999 |
  3. | 12-04-1983 |
  4. | 15-12-2012 |
     +------------+

如果您的文本文件中的月份和日期都包含单个数字,则您遵循上述相同的逻辑,但在导入数据后,您还需要处理第三个变量。