我的数据集包含两个主要变量X
和Y
。
X
表示具有不同品牌的多个计算机商品的不同代码(例如001X01,001X02等)。Y
表示商店中每个变量代码X
(例如15 = 15%,001X01)的税费。我使用虚拟变量为这些计算机项目创建了类别(例如,{1}}虚拟变量用于硬盘驱动器,当变量HD
表示HD时取值为1等)。我有一个包含40多个变量的列表(其中两个代表X
和X
,其余的是我为计算机项创建的不同类别的一组虚拟变量。
我想在Stata中使用循环显示所有这些类别的平均值,但我不确定如何执行此操作。
例如代码:
Y
给出了代表硬盘的类别的平均税。如何在Stata中使用循环自动显示每个类别收取的所有平均税?我会手工完成没有问题,但我想重复这个过程多年,所以我想每年使用一个循环来提出这个输出。
我的目标是创建一个单独的Excel文件,其中包含我创建的每个计算机类别(共38个)以及每年按类别划分的平均税。
答案 0 :(得分:2)
为什么要打扰循环并创建指标变量?如果我理解正确,您的初始数据集允许使用简单的collapse
:
clear all
set more off
input ///
code tax str10 categ
1 0.15 "hd"
2 0.25 "pend"
3 0.23 "mouse"
4 0.29 "pend"
5 0.16 "pend"
6 0.50 "hd"
7 0.54 "monitor"
8 0.22 "monitor"
9 0.21 "mouse"
10 0.76 "mouse"
end
list
collapse (mean) tax, by(categ)
list
要转到Excel,您可以尝试export excel
或put excel
。
运行help collapse
和help export
了解详情。
修改强>
因为你坚持,下面是一个使用循环给出相同结果的例子。
我假设与以前相同的数据input
。一些测试使用此示例数据库
使用expand 1000000
表示速度几乎相同。但几乎肯定是,
你(包括你的你未来)和你的读者会更喜欢collapse
。
它更清晰,更清晰,更简洁。它甚至更漂亮。
levelsof categ, local(parts)
gen mtax = .
quietly {
foreach part of local parts {
summarize tax if categ == "`part'", meanonly
replace mtax = r(mean) if categ == "`part'"
}
}
bysort categ: keep if _n == 1
keep categ mtax
Stata的功能使其与其他语言完全不同。一旦您 开始掌握它,你会发现许多事情在其他地方循环完成, 可以在Stata中制作无环路。在许多情况下,后一种风格将是首选。
使用help <command>
查看相应的帮助文件,如果您不熟悉已保存的结果(例如r(mean)
),请键入help return
。
答案 1 :(得分:1)
Roberto的优秀答案的补充:在collapse
之后, 需要一个循环才能将结果导出为excel。
levelsof categ, local(levels)
foreach x of local levels {
export excel `x', replace
}
我更喜欢将数字代码用于变量,例如类别变量。然后我为它们分配值标签。这是罗伯托的代码的一个版本,它执行此操作,为了更接近您的问题,添加“年”变量
input code tax categ year
1 0.15 1 1999
2 0.25 2 2000
3 0.23 3 2013
4 0.29 1 2010
5 0.16 2 2000
6 0.50 1 2011
7 0.54 4 2000
8 0.22 4 2003
9 0.21 3 2004
10 0.76 3 2005
end
#delim ;
label define catl
1 hd
2 pend
3 mouse
4 monitor
;
#delim cr
label values categ catl
collapse (mean) tax, by(categ year)
levelsof categ, local(levels)
foreach x of local levels {
export excel `:label (categ) `x'', replace
}
#delim ;
命令可以在单独的行中轻松列出每个代码。 export
语句中的“label”函数是一个扩展宏函数,用于在文件名中插入值标签。