У меня есть набор данных приличного размера (около 18 000 строк). У меня есть две переменные, которые я хочу свести в таблицу: одна принимает много строковых значений, а вторая принимает только 4 значения. Я хочу свести в таблицу строковые значения по 4 категориям. Мне нужно, чтобы они были отсортированы. Я пробовал несколько команд, в том числе tabsort
, которая работает, но только если я ограничу количество строк, которые она использует, до первых 603 (по крайней мере, с учетом того, как она сортируется в настоящее время). Если количество строк больше этого, я получаю ошибку r(134)
о том, что значений слишком много. Есть ли что-нибудь сделать? Моя цель — создать таблицу с наиболее распространенными словами и экспортировать ее в LaTeX. Было бы намного проще попытаться сделать это в чем-то вроде R?
Сортированная двусторонняя табуляция многих значений
comment
Как вы хотите, чтобы они были отсортированы?
- person Dimitriy V. Masterov   schedule 08.06.2016
comment
Да, я должен был быть более ясным. Я хочу, чтобы они были отсортированы по частоте, чтобы наиболее часто встречающиеся слова отображались вверху. Я не придирчив к тому, что именно это означает. Моя предпочтительная сортировка была бы той же сортировкой, которую можно было бы получить, не разделяя их на 4 значения (т. е. ту, которая была бы получена с использованием односторонней таблицы). Но также было бы хорошо, если бы он сортировался по частоте только по одному из столбцов.
- person bill999   schedule 08.06.2016
Ответы (1)
Вот один из способов, через contract
и texsave
из SSC:
/* Fake Data */
set more off
clear
set matsize 5000
set seed 12345
set obs 1000
gen x = string(rnormal())
expand mod(_n,10)
gen y = mod(_n,4)
/* Collapse Data to Get Frequencies for Each x-y Cell */
preserve
contract x y, freq(N)
reshape wide N, i(x) j(y)
forvalues v=0/3 {
lab var N`v' "`v'" // need this for labeling
replace N`v'=0 if missing(N`v')
}
egen T = rowtotal(N*)
gsort -T x // sort by occurrence
keep if T > 0 // set occurrence threshold
capture ssc install texsave
texsave x N0 N1 N2 N3 using "tab_x_y.tex", varlabel replace title("tab x y")
restore
/* Check Calculations */
type "tab_x_y.tex"
tab x y, rowsort
person
Dimitriy V. Masterov
schedule
07.06.2016
После
keep if T > 0
вы можете просто list x N?
- person Nick Cox; 08.06.2016
@NickCox Я думаю, что ОП хотела таблицу LaTeX, поэтому вывода вывода на экран было бы недостаточно.
- person Dimitriy V. Masterov; 08.06.2016
Конечно, но другие, заинтересованные в этой теме, не должны быть так ограничены.
- person Nick Cox; 08.06.2016
@NickCox С этой целью я думаю, что
tab x y, rowsort
было бы лучше.
- person Dimitriy V. Masterov; 09.06.2016
Да и нет. Если
tabulate
работает, то ладно. Но ОП уже сообщил, что его укусили ограничения на tabsort
(не объяснено, но от SSC). Как его автор, я знаю, что tabsort
— это просто оболочка для tabulate
; так что tabulate
здесь может работать не лучше, чем tabsort
. Вот почему я рекомендую list
.
- person Nick Cox; 09.06.2016