按行对多列求和(在 Stata 中)
Sum across multiple columns by row (in Stata)
我正在尝试对每行的多个列(变量)的值求和,并将求和值存储为新列。但是,我的数据(一个 Stata 文件)有 500 多个变量,每列都由一些缩写命名,没有任何可识别的前缀模式(另外,前几个变量是名称和 ID),因此使用 varlist
在 rowtotal()
函数内,也不使用通配符方法 rowtotal(prefix*)
.
我想知道是否有一种方法可以按列范围对 Stata 数据进行子集化,并以类似 R 的方式在 tjose 列上应用 rowtotal()
(例如,df[, 3:500]
),因为我知道我想总结的列范围。像这样
year state aalco aata acdt acpeu
2000 usa 0 0 -1 0
2001 usa 0 0 -1 0
2002 usa 0 0 -1 0
2003 usa 0 0 -1 0
2004 usa 0 0 -1 0
2005 usa 0 0 -1 0
2006 usa 0 0 -1 0
2007 usa 0 0 -1 0
2008 usa 0 0 -1 0
2009 usa 0 0 -1 0
2010 usa 0 0 -1 0
2011 usa 0 0 -1 0
2012 usa 0 0 -1 0
我在这里附上了我的数据 link,希望有人能给我一些提示
https://www.dropbox.com/s/fy5zpmf2tdlf3wx/dyadic_format3.dta?dl=1
为了更好地说明,使用稍微改动过的示例,以下对我有用:
clear
input year str3 state aalco aata acdt acpeu
2000 usa 0 3 -1 0
2001 usa 0 0 -1 0
2002 usa 0 0 -1 0
2003 usa 0 0 -1 0
2004 usa 0 7 -1 0
2005 usa 0 0 -1 0
2006 usa 0 0 -1 0
2007 usa 0 0 -1 0
2008 usa 0 0 -1 0
2009 usa 0 0 -1 0
2010 usa 0 0 -1 1
2011 usa 0 0 -1 9
2012 usa 0 0 -1 0
end
ds year state, not
putmata data = (`r(varlist)'), view replace
mata: st_store((1::13), st_addvar("double","foo"), rowsum(data[.,2..4]))
结果:
list
+--------------------------------------------------+
| year state aalco aata acdt acpeu foo |
|--------------------------------------------------|
1. | 2000 usa 0 3 -1 0 2 |
2. | 2001 usa 0 0 -1 0 -1 |
3. | 2002 usa 0 0 -1 0 -1 |
4. | 2003 usa 0 0 -1 0 -1 |
5. | 2004 usa 0 7 -1 0 6 |
|--------------------------------------------------|
6. | 2005 usa 0 0 -1 0 -1 |
7. | 2006 usa 0 0 -1 0 -1 |
8. | 2007 usa 0 0 -1 0 -1 |
9. | 2008 usa 0 0 -1 0 -1 |
10. | 2009 usa 0 0 -1 0 -1 |
|--------------------------------------------------|
11. | 2010 usa 0 0 -1 1 0 |
12. | 2011 usa 0 0 -1 9 8 |
13. | 2012 usa 0 0 -1 0 -1 |
+--------------------------------------------------+
findname
在 Stata Journal 20(2) 2020 中更新有一些按列号识别变量的功能。
. sysuse auto, clear
(1978 Automobile Data)
. findname, col(7/12)
weight length turn displacement gear_ratio foreign
. findname, col(1/6)
make price mpg rep78 headroom trunk
我正在尝试对每行的多个列(变量)的值求和,并将求和值存储为新列。但是,我的数据(一个 Stata 文件)有 500 多个变量,每列都由一些缩写命名,没有任何可识别的前缀模式(另外,前几个变量是名称和 ID),因此使用 varlist
在 rowtotal()
函数内,也不使用通配符方法 rowtotal(prefix*)
.
我想知道是否有一种方法可以按列范围对 Stata 数据进行子集化,并以类似 R 的方式在 tjose 列上应用 rowtotal()
(例如,df[, 3:500]
),因为我知道我想总结的列范围。像这样
year state aalco aata acdt acpeu
2000 usa 0 0 -1 0
2001 usa 0 0 -1 0
2002 usa 0 0 -1 0
2003 usa 0 0 -1 0
2004 usa 0 0 -1 0
2005 usa 0 0 -1 0
2006 usa 0 0 -1 0
2007 usa 0 0 -1 0
2008 usa 0 0 -1 0
2009 usa 0 0 -1 0
2010 usa 0 0 -1 0
2011 usa 0 0 -1 0
2012 usa 0 0 -1 0
我在这里附上了我的数据 link,希望有人能给我一些提示 https://www.dropbox.com/s/fy5zpmf2tdlf3wx/dyadic_format3.dta?dl=1
为了更好地说明,使用稍微改动过的示例,以下对我有用:
clear
input year str3 state aalco aata acdt acpeu
2000 usa 0 3 -1 0
2001 usa 0 0 -1 0
2002 usa 0 0 -1 0
2003 usa 0 0 -1 0
2004 usa 0 7 -1 0
2005 usa 0 0 -1 0
2006 usa 0 0 -1 0
2007 usa 0 0 -1 0
2008 usa 0 0 -1 0
2009 usa 0 0 -1 0
2010 usa 0 0 -1 1
2011 usa 0 0 -1 9
2012 usa 0 0 -1 0
end
ds year state, not
putmata data = (`r(varlist)'), view replace
mata: st_store((1::13), st_addvar("double","foo"), rowsum(data[.,2..4]))
结果:
list
+--------------------------------------------------+
| year state aalco aata acdt acpeu foo |
|--------------------------------------------------|
1. | 2000 usa 0 3 -1 0 2 |
2. | 2001 usa 0 0 -1 0 -1 |
3. | 2002 usa 0 0 -1 0 -1 |
4. | 2003 usa 0 0 -1 0 -1 |
5. | 2004 usa 0 7 -1 0 6 |
|--------------------------------------------------|
6. | 2005 usa 0 0 -1 0 -1 |
7. | 2006 usa 0 0 -1 0 -1 |
8. | 2007 usa 0 0 -1 0 -1 |
9. | 2008 usa 0 0 -1 0 -1 |
10. | 2009 usa 0 0 -1 0 -1 |
|--------------------------------------------------|
11. | 2010 usa 0 0 -1 1 0 |
12. | 2011 usa 0 0 -1 9 8 |
13. | 2012 usa 0 0 -1 0 -1 |
+--------------------------------------------------+
findname
在 Stata Journal 20(2) 2020 中更新有一些按列号识别变量的功能。
. sysuse auto, clear
(1978 Automobile Data)
. findname, col(7/12)
weight length turn displacement gear_ratio foreign
. findname, col(1/6)
make price mpg rep78 headroom trunk