Digamos que eu tenha estes dados:
clear all
set obs 2
gen title = "dog - cat - horse" in 1
replace title = "chicken - frog - ladybug" in 2
tempfile data
save `data'
Posso dividi-los em três partes:
use `data', clear
split title, p(" - ")
E posso dividi-los em duas partes, descartando a terceira parte:
use `data', clear
split title, p(" - ") limit(2)
Existe uma solução pronta para dividir em apenas duas partes, mas agrupar tudo depois do primeiro caractere de divisão (traço neste caso) na segunda variável? Em R, eu usaria separate
com a extra="merge"
opção (veja tidyr separa apenas as primeiras n instâncias ).
Em outras palavras, para a primeira linha, gostaria que as primeiras observações title1
fossem dog
e para title2
fossem cat - horse
.
Percebo que isso é possível usando código personalizado (veja Stata split string into parts ), mas espero um comando simples como o split
/R do Stata separate
para atingir meu objetivo.
No momento, esta não é uma opção no
split
comando oficial. (Divulgação completa: eu era o autor anterior.)Você poderia simplesmente escrever seu próprio comando. Este precisa de mais generalidade e mais verificações de erro, mas ele faz o que eu acho que você quer com seu exemplo de dados. Detalhe: é desejado cortar espaços?
Note também a
egen
funçãoends()
e suas opçõeshead
andtail
. Usar isso precisaria de duas chamadas. Ela gera apenas uma variável por vez.