Split 如何使用重塑或其他函数修复此数据
我有一些数据,这些数据结合了一些具体的条目。如果每个县都应该在该列表中单独列出,则这些条目都放在同一行。我使用了Split 如何使用重塑或其他函数修复此数据,split,stata,reshape,Split,Stata,Reshape,我有一些数据,这些数据结合了一些具体的条目。如果每个县都应该在该列表中单独列出,则这些条目都放在同一行。我使用了split将这些数据分为county1等,但我试图找出如何使用重塑或其他函数保留所有数据,但将县、county1等更改为对县的单独观察。我想在不丢失其他条目的情况下从宽到长移动 utility_name state county unique_id Alaska Village Elec Coo
split
将这些数据分为county1
等,但我试图找出如何使用重塑
或其他函数保留所有数据,但将县
、county1
等更改为对县
的单独观察。我想在不丢失其他条目的情况下从宽到长移动
utility_name state county unique_id
Alaska Village Elec Coop, Inc AK Borough, Kodiak Island 221AK
Wolverine Pwr Supply Coop, Inc MI Allegan, Antim, Barry, Benzie, 20910MI
Wolverine Pwr Supply Coop, Inc MI Clinton, Eaton, Emmet, Gratiot 20910MI
Wolverine Pwr Supply Coop, Inc MI Grand Traverse, Ingham, Ionia 20910MI
Wolverine Pwr Supply Coop, Inc MI Isabella, Lake, Leelanau 20910MI
Wolverine Pwr Supply Coop, Inc MI Manistee, Mason, Mecosta, 20910MI
Wolverine Pwr Supply Coop, Inc MI Missaukee, Montcalm, Muskegon 20910MI
Wolverine Pwr Supply Coop, Inc MI Newaygo, Oceana, Osceola 20910MI
Wolverine Pwr Supply Coop, Inc MI Ottawa, Alpena, Charlevoix 20910MI
Soyland Power Coop Inc IL McDonough, McCoupin 40307IL
Soyland Power Coop Inc IL Menard, Morgan,Montgomery 40307IL
Soyland Power Coop Inc IL Sangamon,Schuyler,Scott,Pike 40307IL
这将成为
Alaska Village Elec Coop, Inc AK Borough 221AK
Alaska Village Elec Coop, Inc AK Kodiak Island 221AK
等等。这个问题似乎是以对美国各州的一些了解为前提的:在国际论坛上多做一点解释是不会出错的
重塑
是Stata中的命令,而不是函数。但这两种方式都不必在这里适用。你似乎想要这样的东西
由于县的名称在一个复合变量中用逗号分隔,因此县的数目是逗号数加1。我们通过概念上删除逗号并找到字符串长度的减少来计算逗号。如果我们看到整个数据集,其中一些代码是可以避免的,这可能是不切实际的
gen long id = _n
gen ncounties = length(county) - length(subinstr(county, ",", "", .)) + 1
expand ncounties
bysort id : gen id2 = _n
su ncounties, meanonly
gen County2 = ""
forval j = 1/`r(max)' {
replace County2 = county`j' if id2 == `j'
}
简言之,主要设备是使用
扩展
复制每个观察结果,但复制的数量取决于每个观察结果中包括多少个县 如果我理解正确的话,您想要的是:
clear
set more off
input ///
str40 utility_name str2 state str40 county str15 unique_id
"Alaska Village Elec Coop, Inc" "AK" "Borough, Kodiak Island" "221AK"
"Wolverine Pwr Supply Coop, Inc" "MI" "Allegan, Antim, Barry, Benzie," "20910MI"
end
split county, parse(",")
rename county origcounty
gen i = _n
reshape long county, i(i)
drop if missing(county)
order origcounty, last
list i - county
你能说一下你的
整形有什么问题吗?似乎标准程序适用于拆分后的。计数ncounties
需要根据尾随逗号的情况进行调整(例如,示例数据的观察2)。没有提到,但我想这个解决方案的前提是使用split
。如果不使用generate()
选项,它将创建一个county2
变量,与gen county2=“”
冲突,因此gen
语句中的county2
应命名为其他名称,例如countyfinal
。这是正确的吗?@RobertoFerrer感谢您提供的详细信息。我已固定到County2
。这确实假设先前使用了问题中提到的split
,这样做很完美。非常感谢。