Импортируйте 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
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