Рассмотрим немного другой игрушечный пример для лучшей иллюстрации:
clear
input strL (colors numbers)
"red green red red blue maroon green pink" "87 45 65 87 98 12 90 43"
end
list
+--------------------------------------------------------------------+
| colors numbers |
|--------------------------------------------------------------------|
1. | red green red red blue maroon green pink 87 45 65 87 98 12 90 43 |
+--------------------------------------------------------------------+
Сначала вы должны split
свою строку в отдельных переменных и изменить данные в длинную форму с помощью команды reshape
.Далее вы рассчитываете частоту каждого слова.Наконец, вы reshape
возвращаетесь к широкой форме и объединяете свои переменные с помощью egen
.
В коде:
split colors
split numbers
drop colors numbers
generate _i = _n
reshape long colors numbers, i(_i) j(_j)
drop if missing(colors) | missing(numbers)
bysort _i colors : generate colors_frequency = _N
bysort _i numbers : generate numbers_frequency = _N
bysort _i (colors_frequency) : generate fcolors = colors[_N]
bysort _i (numbers_frequency) : generate fnumbers = numbers[_N]
drop colors_frequency numbers_frequency
reshape wide colors numbers, i(_i) j(_j)
egen new_colors = concat(colors*), punct(" ")
egen new_numbers = concat(numbers*), punct(" ")
drop _i colors* numbers*
rename (new_colors new_numbers) (colors numbers)
Приведенный выше фрагмент даст желаемый результат:
list fcolors fnumbers
+--------------------+
| fcolors fnumbers |
|--------------------|
1. | red 87 |
+--------------------+