如何在不转换 Stata 数据的情况下以相当长的格式将数据写入 Excel?
How can I write data to Excel in rather long format without transforming data in Stata?
我有一个如下所示的数据集:
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 文件,"loops" 通过这些变量的值并将它们放在 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 中可能有类似的方法。
对单个观察值的循环比对变量的循环要慢得多。
以下是实现目标的两种可能方式:
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
我有一个如下所示的数据集:
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 文件,"loops" 通过这些变量的值并将它们放在 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 中可能有类似的方法。
对单个观察值的循环比对变量的循环要慢得多。
以下是实现目标的两种可能方式:
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