我正在尝试使用insheet
从 .csv 文件加载数据集。然而,数据集中的分隔符是","
(包括引号)而不是简单的逗号,
。.csv 文件中的前三行因此看起来像这样:
Name","Sex","Income
John","M","45000
Jane","F","20000
似乎insheet
不允许使用多字符分隔符 - 我收到一条错误消息,指出“delimiter() 选项指定错误”。无论如何,从这样的文件中轻松获取内表数据吗?
解决方案 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(也许)。
你检查过infix
吗infile
?我对这些没有经验,但它们可能值得一试。
这不是特别好的技术,但它强调了@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