使用逗号作为小数分隔符导入带有数字的csv

时间:2018-04-25 13:26:39

标签: stata decimal-point

我有一个5 gb csv文件,需要一个多小时才能导入到stata。

原因是,除其他外,它是欧洲格式,即它是一个;分隔的文件,数字列带有,作为小数分隔符。例如:

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

问题是stata假设数字列是字符串变量,因此,尝试以非常低效的方式导入它(尝试将列声明为数字只是给我缺少值)。

是否有一个命令/选项,我输入一个不同的小数点分隔符,因此导入过程更快?

2 个答案:

答案 0 :(得分:2)

如果您的数据文件如下所示:

BitVec

您可以执行以下操作:

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

从Stata 15版本开始,没有一种方法可以一步到位。我认为唯一的其他解决方案是通过将逗号更改为句点来预处理数据文件。 Excel可以轻松完成此操作。

答案 1 :(得分:2)

我认为您要寻找的功能已添加到Stata16。命令import delimited具有新的选项parselocale()groupseparator()decimalseparator()

请参见下面的 whatsnew15to16 中的10/c

help whatsnew15to16
  
      
  1. 导入定界是从中导入数据的现有命令   分隔的文本文件。它已得到增强。

         

    a。它更快。通常快10%,快2至4倍               在某些情况下更快。

         

    b。它可以更好地检测定界符。除了逗号和制表符之外,它             现在可以检测到管道,冒号和分号。

         

    c。新选项允许基于语言环境的数字分析。选项         是parselocale(),groupseparator()和decimalseparator()。

         d。报告导入文件中的引号不匹配,以便您             可以修复它们。

  2.   

有关数据:

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