Как разделить наблюдения в Стате - PullRequest
0 голосов
/ 24 мая 2018

Я пытался сделать следующее преобразование в моем наборе данных Stata: enter image description here Number, Cluster и Rating - мои три переменные.Все значения являются строками.

Есть ли у вас какие-либо конкретные предложения для Stata?

Спасибо!

1 Ответ

0 голосов
/ 24 мая 2018

Несмотря на отсутствие хорошего примера данных или попытки кода, могут быть внесены предложения:

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 оставшихся элементоввсе считаются словами в смысле Статы.Если это не так, вы должны указать, что является проблематичным, и может быть предложен альтернативный код.

РЕДАКТИРОВАТЬ: более общий код:

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)
...