Импортируйте csv, в котором в качестве десятичного разделителя используются цифры с запятой

У меня 5 гб csv файл, который занимает более часа, чтобы импортировать в stata.

Причина, среди прочего, в европейском формате, то есть ; Отдельный файл и числовые столбцы поставляются с , в качестве десятичного разделителя. Например:

V1  V2   V3
A   2,4  10,1
B   30   1,4

Проблема в том, что stata Предполагается, что числовые столбцы являются строковыми переменными, поэтому пытается импортировать их действительно неэффективным способом (пытаясь объявить столбцы как числовые значения, просто получая пропущенные значения).

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

1 ответ

Решение

Если ваш файл данных выглядит так:

A; 2,4; 10,1  
B; 30; 1,4

Вы можете сделать следующее:

import delimited whatever_filename.txt, delimiters(";") varnames(nonames)
destring v2 v3, dpcomma replace

list

   +-----------------+
   | v1    v2     v3 |
   |-----------------|
1. |  A   2.4   10.1 |
2. |  B    30    1.4 |
   +-----------------+

Начиная с версии 15 Stata, нет способа сделать это за один шаг. Я думаю, что единственное другое решение - предварительно обработать файл данных, изменив запятую на точку. Excel может сделать это легко.

Я думаю, что функция, которую вы ищете, была добавлена ​​в Stata 16. Команда import delimited есть новые возможности parselocale(), groupseparator(), а также decimalseparator().

Видеть 10/cиз whatsnew15to16 ниже:

help whatsnew15to16
  1. import delimited - это существующая команда для импорта данных из текстовых файлов с разделителями. Он был улучшен.

    а. Это быстрее. В целом это на 10% быстрее, а в некоторых случаях - в 2–4 раза.

    б. Он лучше определяет разделители. В дополнение к запятым и табуляциям теперь он обнаруживает вертикальные черты, двоеточия и точки с запятой.

    c. Новые параметры позволяют анализировать числа в зависимости от локали. Возможные варианты: parselocale(), groupseparator() и decimalseparator().

    d. Сообщается о несоответствующих кавычках в импортированном файле, чтобы вы могли их исправить.

Для данных:

A; 2,4; 10,1  
B; 30; 1,4

Вы могли сделать следующее:

import delimited "D:\data.csv", varnames(nonames) parselocale(es_ES)

или

import delimited "D:\data.csv", varnames(nonames) groupseparator(.) decimalseparator(,) 
list

     +-----------------+
     | v1    v2     v3 |
     |-----------------|
  1. |  A   2.4   10.1 |
  2. |  B    30    1.4 |
     +-----------------+

describe

    Contains data
      obs:             2                          
     vars:             3                          
    --------------------------------------------------------------------------------
                  storage   display    value
    variable name   type    format     label      variable label
    --------------------------------------------------------------------------------
    v1              str1    %9s                   
    v2              float   %8.0g                 
    v3              float   %9.0g   


Другие вопросы по тегам