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

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

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 27 июня 2019

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

См. 10/c из whatsnew15to16 ниже:

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

    а. Это быстрее. Это на 10% быстрее в целом и от 2 до 4 раз быстрее в некоторых случаях.

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

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

    * * 1 022 д. О несоответствующих кавычках в импортированном файле сообщается, так что вы можно исправить их.

Для данных:

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   


0 голосов
/ 25 апреля 2018

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

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 может сделать это легко.

...