gpt4 book ai didi

csv - 如何导入一些观察结果位于两行的 csv 数据

转载 作者:行者123 更新时间:2023-12-02 04:49:07 25 4
gpt4 key购买 nike

我有一个包含几百万行的数据集。它是 csv 格式。我想将它导入 Stata。我可以这样做,但有一个问题 - 一小部分(但仍然很多)的观察结果出现在 CSV 文件的两行中。大多数条目只出现在一行中。就用逗号分隔而言,占用 2 行的麻烦观察结果仍然遵循相同的模式。但在 Stata 数据集中,观察结果显示在两行中,两行仅包含总数据的一部分。

我使用import delimited 来导入数据。在 Stata 流程的数据导入阶段有什么可以做的吗?如果可能的话,我宁愿不必在原始 CSV 文件中处理这个问题。

***更新

这是 csv 文件的示例:

var1,var2,var3,var4,var5 
text 1, text 2,text 3 ,text 4,text 5
text 6,text 7,text 8,text9,text10
text 11,text 1
2,text 13,text14,text15
text16,text17,text18,text19,text20

请注意,行尾没有逗号。另请注意,问题在于以 text 11 开头的观察结果。

这基本上就是它在 Stata 中的显示方式:

    var1     var2     var3     var4     var5 
1 text 1 text 2 text 3 text 4 text 5
2 text 6 text 7 text 8 text9 text10
3 text 11 text 1
4 2 text 13 text14 text15
5 text16 text17 text18 text19 text20

有时数字紧挨着 text 并不是错误 - 这只是为了说明数据比此处显示的更复杂。

当然,这就是我需要数据的方式:

    var1     var2     var3     var4     var5 
1 text 1 text 2 text 3 text 4 text 5
2 text 6 text 7 text 8 text9 text10
3 text 11 text 12 text 13 text14 text15
4 text16 text17 text18 text19 text20

最佳答案

一个复杂的方法是(内联评论):

clear
set more off

*----- example data -----

// change delimiter, if necessary
insheet using "~/Desktop/stata_tests/test.csv", names delim(;)

list

*----- what you want -----

// compute number of commas
gen numcom = length(var1var2var3var4var5) ///
- length(subinstr(var1var2var3var4var5, ",", "", .))

// save all data
tempfile orig
save "`orig'"

// keep observations that are fine
drop if numcom != 4

// save fine data
tempfile origfine
save "`origfine'"

*-----

// load all data
use "`orig'", clear

// keep offending observations
drop if numcom == 4

// for the -reshape-
gen i = int((_n-1)/2) +1
bysort i : gen j = _n

// check that pairs add up to 4 commas
by i : egen check = total(numcom)
assert check == 4

// no longer necessary
drop numcom check

// reshape wide
reshape wide var1var2var3var4var5, i(i) j(j)

// gen definitive variable
gen var1var2var3var4var5 = var1var2var3var4var51 + var1var2var3var4var52
keep var1var2var3var4var5

// append new observations with original good ones
append using "`origfine'"

// split
split var1var2var3var4var5, parse(,) gen(var)

// we're "done"
drop var1var2var3var4var5 numcom
list

但我们实际上并没有您数据的详细信息,因此这可能有效也可能无效。这只是一个粗略的草稿。根据数据占用的内存空间和其他细节,您可能需要改进部分代码以提高效率。

注意文件test.csv看起来像

var1,var2,var3,var4,var5 
text 1, text 2,text 3 ,text 4,text 5
text 6,text 7,text 8,text9,text10
text 11,text 1
2,text 13,text14,text15
text16,text17,text18,text19,text20

注意 2: 我正在使用 insheet,因为我目前没有 Stata 13。 import delimited 是可行的方法。

注意 3:有关如何计算逗号的详细信息,请访问 Stata tip 98: Counting substrings within strings 查看。 ,作者:尼克·考克斯。

关于csv - 如何导入一些观察结果位于两行的 csv 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30494209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com