如何在不转换Stata中的数据的情况下,以相当长的格式将数据写入Excel?

如何在不转换Stata中的数据的情况下,以相当长的格式将数据写入Excel?,stata,spss,Stata,Spss,我有一个如下所示的数据集: ID Var1 Var2 1 a1 b1 2 a2 b2 3 a3 b3 etc. ID=1 Var1 = a1 & Var2 = b1 ID=2 Var1 = a2 & Var2 = b2 ID=3 Var1 = a3 & Var3 = b3 etc. 现在我想将这些数据写入Excel文件,该文件如下所示: ID Var1 Var2 1 a1 b1 2 a2 b2 3

我有一个如下所示的数据集:

ID  Var1 Var2  
1   a1   b1  
2   a2   b2
3   a3   b3  
etc.
ID=1
Var1 = a1 & Var2 = b1
ID=2
Var1 = a2 & Var2 = b2
ID=3
Var1 = a3 & Var3 = b3
etc.  
现在我想将这些数据写入Excel文件,该文件如下所示:

ID  Var1 Var2  
1   a1   b1  
2   a2   b2
3   a3   b3  
etc.
ID=1
Var1 = a1 & Var2 = b1
ID=2
Var1 = a2 & Var2 = b2
ID=3
Var1 = a3 & Var3 = b3
etc.  
这就像编写一个Excel文件,通过这些变量的值“循环”并将它们放入Excel行中。我能想到的一种可能的方法是创建额外的文本变量,并将数据重塑为长格式。但是,有没有更有效的方法来实现这一结果而不必这样做?我做了一些搜索,看起来
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

对单个观测值的循环要比对变量的循环慢得多

以下是实现目标的两种潜在方法:

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和cv的数据集,导出的Excel按水平顺序组织这些变量。然而,我需要按垂直顺序组织它们,正如我在原始帖子中所描述的那样。重塑将完成这项工作,但我想知道是否有更有效的方法;也就是说,不要重塑数据(重塑程序将有大量的变量)。@NonSleeper我应该更清楚一点。将
导出
部分放在
还原
之前,或者干脆去掉
保留
还原
行。我用第一条建议编辑了这篇文章。我尝试了第一种方法。程序创建了一个包含两个变量id和cv的数据集,导出的Excel按水平顺序组织这些变量。然而,我需要按垂直顺序组织它们,正如我在原始帖子中所描述的那样。重塑将完成这项工作,但我想知道是否有更有效的方法;也就是说,不要重塑数据(重塑程序将有大量的变量)。@NonSleeper我应该更清楚一点。将
导出
部分放在
还原
之前,或者干脆去掉
保留
还原
行。我用第一条建议编辑了这篇文章。