Split 如何在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

我一直在尝试在我的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 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