Импорт текстового файла с разделителем длины - PullRequest
0 голосов
/ 03 июня 2018

У меня есть текстовый файл, который содержит только цифры.

Например:

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 голосов
/ 04 июня 2018

Ответ зависит от того, что вы хотите сделать с данными позже.

Насколько я понимаю, пробелы указывают одну цифру для чисел, связанных с датой, и что в текстовом файле только месяц или день могут быть одной цифрой, но не обоими.Кроме того, sex и married - это двоичные индикаторы, принимающие значения 0 и 1.

При условии, что вышеприведенные значения верны и данные ниже включены в файл 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 |
     +------------+

Если вваш текстовый файл, состоящий из месяца и дня, содержит одну цифру, вы следуете той же логике, что и выше, но вам нужно будет обработать третью переменную и после импорта данных.

...