我使用insheet
读取CSV格式的数据。变量的名称应该是数据集的第一行。我有很多变量和多年的数据要读取,所以我想使用foreach var
循环执行此操作,如下所示:
input str8 x str8 y str8 z
first second third
3 6 2
4 1 2
8 7 6
end
foreach var of varlist * {
rename variable "`var'" "`=`var'[1]'"
}
很遗憾,我收到syntax error
回复。
我假设问题必须与我指定新名称的方式相同。我从这个Q& A:http://www.stata.com/statalist/archive/2011-09/msg01109.html
推断出来答案 0 :(得分:2)
问题与foreach
无关。您的input
代码并没有为我竞争,但这似乎是个问题。
主要问题似乎是
rename
不包含语法variable
,除非它是变量名称。
rename
不使用双引号。
请参阅rename
的帮助。
这可以继续下去。
clear
input str8 x str8 y str8 z
"first" "second" "third"
"3" "6" "2"
"4" "1" "2"
"8" "7" "6"
end
foreach var of varlist * {
rename `var' `=`var'[1]'
}
drop in 1
destring, replace
l
+------------------------+
| first second third |
|------------------------|
1. | 3 6 2 |
2. | 4 1 2 |
3. | 8 7 6 |
+------------------------+
但是,insheet
是一个过时的命令。
请参阅help import
或http://www.stata.com/manuals14/dimport.pdf,了解import delimited
是使用什么,并且它支持数据文件第一行的变量名称,因此不需要这些,除非您只能访问较旧版本的Stata。
(如果您使用的是旧版本,在任何支持Stata问题的论坛中明确说明这一点总是一个好主意。)
编辑:正如@Roberto Ferrer所指出的,insheet
也支持第一行的变量名称。