Split 如何在Stata中分割观测值
我一直在尝试在我的Stata数据集中进行以下转换:Split 如何在Stata中分割观测值,split,stata,Split,Stata,我一直在尝试在我的Stata数据集中进行以下转换: Number、Cluster和Rating是我的三个变量。所有值都是字符串 你有什么具体的建议吗 谢谢大家! 尽管缺乏良好的数据示例或尝试的代码,但可以提出以下建议: clear input str7 Number str3 Cluster str6 Rating "017;092" "Z12" "High" "400;401" "Z14" "Medium" "523" "Z98" "Low" end replace Num
Number
、Cluster
和Rating
是我的三个变量。所有值都是字符串
你有什么具体的建议吗
谢谢大家! 尽管缺乏良好的数据示例或尝试的代码,但可以提出以下建议:
clear
input str7 Number str3 Cluster str6 Rating
"017;092" "Z12" "High"
"400;401" "Z14" "Medium"
"523" "Z98" "Low"
end
replace Number = subinstr(Number, ";", " ", .)
gen count = wordcount(Number)
gen long id = _n
expand count
bysort id : replace Number = word(Number, _n)
list, sepby(id)
+----------------------------------------+
| Number Cluster Rating count id |
|----------------------------------------|
1. | 017 Z12 High 2 1 |
2. | 092 Z12 High 2 1 |
|----------------------------------------|
3. | 400 Z14 Medium 2 2 |
4. | 401 Z14 Medium 2 2 |
|----------------------------------------|
5. | 523 Z98 Low 1 3 |
+----------------------------------------+
这里的代码基于这样一个假设,即一旦分号从Number
中删除,其余的元素在Stata的意义上都算作单词。如果不是这样,您应该详细说明问题所在,并建议使用其他代码
编辑:更多通用代码:
clear
input str7 Number str3 Cluster str6 Rating
"017;092" "Z12" "High"
"400;401" "Z14" "Medium"
"523" "Z98" "Low"
end
split Number, parse(;)
local nvars : word count `r(varlist)'
gen long id = _n
expand `nvars'
forval j=1/`nvars' {
bysort id: replace Number = Number`j' if _n == `j'
}
drop if missing(Number)
list, sepby(id)
我不明白。这是一个字符串变量吗?您需要提供一个理想的使用
dataex
@pearlyspuncer抱歉,这个版本更清晰吗?最好是在Stata中使用合适的示例,而不仅仅是链接或上传图片。你能把你尝试过但显然不起作用的代码也包括进来吗?我完全支持你的建议,但这看起来像是家庭作业,有人只是简单地要求一个解决方案。我在复习的时候已经看过好几次了。如果这是家庭作业的话,在我看来这不是小事。即使预期的答案以split
(我确实知道!)开头,但仍有一些更进一步的东西要做。我喜欢你的解决方案。但最后一步总是可以概括的吗?最后一段论述了这一点。更通用的解决方案可以使用split
。