Как сделать группу по заявке (из MySQL) в Stata? - PullRequest
2 голосов
/ 01 сентября 2011

Я не специалист по статистике, но имею дело с некоторыми данными. В большинстве случаев эти наборы данных поступают из онлайн-опроса; следовательно, у меня есть база данных MySQL и я знаю, как из этого получить некоторые результаты.

Однако теперь у меня есть файл Stata, и я должен провести некоторый анализ. В MySQL я бы знал, как это сделать, но я застрял в Stata и прошу вашей помощи.

У меня есть не слишком маленькая таблица (примерно 50 тыс. Строк), содержащая следующие столбцы (есть больше столбцов, но это те, с которыми мне нужно работать):

id - идентификатор объекта, уникальные значения

name - Имя объекта, строковое значение

class - Класс объекта, целочисленный диапазон 1 - 6

origin - происхождение объекта, целочисленный диапазон 1 - 2

В строках 50К есть только около 7К разных имен. В Stata я могу получить все имена с list name и даже ограничить его одним классом с list name if class == 2.

Теперь я хочу получить список всех разных имен вместе с количеством объектов с таким именем и отсортировать список по количеству . В MySQL я бы запросил SELECT name, COUNT(*) AS cnt FROM objects GROUP BY name ORDER BY cnt DESC. Но как бы это было сделано в Stata?

Следующими шагами будет получение таких списков для каждого класса или для обоих источников, т. Е. SELECT name, COUNT(*) AS cnt FROM objects WHERE class = 2 GROUP BY name ORDER BY cnt DESC, возможно ли это и в Stata?

ps: я не знаю, является ли стековеропоток правильным местом, так как Stata на самом деле не является языком программирования, не так ли? Но я нашел здесь несколько вопросов, связанных со Stata; вот почему я разместил это здесь. Если есть лучшее место для этого, пожалуйста, укажите мне правильное место.

Ответы [ 2 ]

2 голосов
/ 01 сентября 2011

Имейте в виду, что Stata работает только с прямоугольными таблицами фиксированной длины, поэтому вы можете добавлять только столбцы, которые занимают целые 50k строк. В этой настройке это то, что вы можете сделать.

Для первой задачи (список имен и частот) вы можете

   collapse (count) freq = name, by(class)
   sort class freq name
   list class name freq, sepby(class)

Обратите внимание, что collapse удалит существующие данные и заменит резюме. (Обычно я ненавижу эту команду для этого аспекта управления данными, но она должна работать здесь.) Если вы не хотите, чтобы это произошло, вот более сложный прием:

   bysort class name : generate long freq = _N
   bysort class name : generate byte first = (_n==1)
   sort class freq name
   list class name freq if first, sepby(class)

(Объяснение: _N - количество наблюдений в by -группе, а _n - номер текущего наблюдения в by -группе.)

Затем вы можете установить это значение для класса интереса с помощью if class==#, как вы уже знаете.

0 голосов
/ 06 июля 2013

Также ознакомьтесь с командой groups, которую можно загрузить с помощью ssc inst groups.

...