2

我正在尝试使用insheet从 .csv 文件加载数据集。然而,数据集中的分隔符是","(包括引号)而不是简单的逗号,。.csv 文件中的前三行因此看起来像这样:

Name","Sex","Income
John","M","45000
Jane","F","20000

似乎insheet不允许使用多字符分隔符 - 我收到一条错误消息,指出“delimiter() 选项指定错误”。无论如何,从这样的文件中轻松获取内表数据吗?

4

2 回答 2

5

解决方案 1。

Stata 13 支持多字符分隔符。命令是import delimited请参阅此处的手册。

解决方案 2。

使用filefilter前使用insheet。例如:

filefilter "source-file" "destination-file", from("\Q,\Q") to(",") replace

这会将您的多字符分隔符替换为逗号分隔符。运行help filefilter

解决方案 3。

find/replace在导入 Stata 之前,您无法使用您最喜欢的文本编辑器进行操作吗?例如,查找","并替换,为 。然后使用Stata的insheet命令。在这方面,一个好的文本编辑器可能比纯 Stata 更灵活。

解决方案4(也许)。

你检查过infixinfile?我对这些没有经验,但它们可能值得一试。

于 2013-11-12T04:58:15.563 回答
2

这不是特别好的技术,但它强调了@Roberto Ferrer 的观点,即存在几种不同的解决方案。首先将您的玩具数据集放入一个文件中,然后将其作为一个字符串变量读入。在这里,我们尊重 Stata <13 of 244 个字符的限制;在 Stata 13 中,您可以拥有更长的字符串变量。

. infix str data 1-244 using test.dat
(3 observations read)

现在split将数据分成几部分,用你的分隔符解析。我们在这里需要复合双引号来保护文字双引号。

. split data, p(`"",""')
variables created as string: 
data1  data2  data3

. l

     +----------------------------------------------+
     |                data   data1   data2    data3 |
     |----------------------------------------------|
  1. | Name","Sex","Income    Name     Sex   Income |
  2. |    John","M","45000    John       M    45000 |
  3. |    Jane","F","20000    Jane       F    20000 |
     +----------------------------------------------+

从第一个观察中取出变量名称,drop然后使用它destring来转换为可以转换的数字。

. forval i = 1/3 {
2. rename data`i'  `=data`i'[1]'
3. }

. drop in 1
(1 observation deleted)

. destring, replace
data contains nonnumeric characters; no replace
Name contains nonnumeric characters; no replace
Sex contains nonnumeric characters; no replace
Income has all characters numeric; replaced as long
于 2013-11-12T11:52:24.447 回答