mysql - 如何在 Stata 中按语句(来自 MySQL)进行分组?

标签 mysql group-by stata

我不是统计人员,但必须处理相当多的数据。在大多数情况下,这些数据集来自在线调查;因此我有一个 MySQL 数据库,并且知道如何从中获取一些结果。

但是,现在我得到了一个Stata文件,我需要做一些分析。在 MySQL 中我知道如何做到这一点,但我被困在 Stata 中并寻求你的帮助。

我有一个不太小的表(大约 50k 行),其中包含以下列(还有更多列,但这些是我必须使用的列):

id - 对象 ID,唯一值

name - 对象名称,字符串值

class - 对象的类,整数范围 1 - 6

origin - 物体的起源,整数范围 1 - 2

在 5 万行中,只有大约 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:我不知道 stackoverflow 是否是正确的地方,因为 Stata 并不是真正的编程语言,是吗?但是我在这里发现了一些Stata相关的问题;这就是为什么我把它贴在这里。如果有更好的地方可以这样做,请指出正确的地方。

最佳答案

请记住,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)

(说明:_Nby-group中的观察个数,_n中当前观察的个数code>by-group.)

然后,您可以使用 if class==# 将其子集化为感兴趣的类,正如您已经知道的那样。

关于mysql - 如何在 Stata 中按语句(来自 MySQL)进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7263114/

相关文章:

mysql - 尝试链接两个表但在一个字段中获取所有信息

php - 在 MySQL 中获取每个月的最后一条记录....?

r - data.table 相当于 tidyr::complete with group_by with on and by 语法

sql - group by 子句中列的顺序重要吗?

mysql - SELECT 和 GROUP BY 月有效

python - 关于如何为 Pygments 编写词法分析器的大量文档?

php - 无法在 AWS LAMP 服务器上运行 PhP artisan migrate

php - 显示值大于 0 的行,然后显示等于 0 的行

if-statement - Stata:使用存储在其他数据集中的条件对数据进行子集化

python - Pandas - 创建一个带有 "dummy variable"的表