我有一个如下所示的数据集:
ID Var1 Var2
1 a1 b1
2 a2 b2
3 a3 b3
etc.
现在我想将这些数据写入Excel文件,如下所示:
ID=1
Var1 = a1 & Var2 = b1
ID=2
Var1 = a2 & Var2 = b2
ID=3
Var1 = a3 & Var3 = b3
etc.
这就像写一个Excel文件那样"循环"通过这些变量的值并将它们放在Excel行中。我能想到的一种可能的方法是创建额外的文本变量和reshape
数据到长格式。但有没有更有效的方法来实现这一结果,而不是必须这样做?我做了一些搜索,看起来putexcel
可能会有所帮助,但我不确定。
编辑:在SPSS中,它可以非常简单直接地完成,例如这种语法:
write outfile='DIRECTORY\output.xls'/"id = " tab id.
write outfile='DIRECTORY\output.xls'/"Var1 =" tab Var1 tab "&" tab "Var2 =" tab Var2.
所以我认为在Stata中可能有类似的方法。
答案 0 :(得分:2)
个别观察的循环比循环变量慢得多。
以下是实现目标的两种可能方式:
clear
input ID str2 Var1 str2 Var2
1 "a1" "b1"
2 "a2" "b2"
3 "a3" "b3"
end
gen id = "ID=" + string(ID)
drop ID
gen cv = ""
foreach var of varlist Var1 Var2 {
replace cv = cv + "`var'=" + `var' + " & "
drop `var'
}
replace cv= regexr(cv," & $","") // remove trailing &
/* Method 1: Stack & Sort */
preserve
sort id
stack id cv, into(column) clear
bys _stack: gen row=_n
sort row _stack
keep column
list, clean noobs
export excel using "myexcelfile_stack", replace
restore
/* Method 2: Reshape */
gen n=_n
rename (id cv) column#, addnumber
reshape long column, i(n) j(row)
keep column
list, clean noobs
export excel using "myexcelfile_reshape", replace