如何在Stata中创建一个group by语句(来自MySQL)?

时间:2011-08-31 20:40:18

标签: mysql group-by stata

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

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

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

id - 对象ID,唯一值

name - 对象名称,字符串值

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

origin - 对象的来源,整数范围1 - 2

在50k行中,只有大约7k个不同的名称。在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有关的问题;这就是我在这里发布的原因。如果有更好的地方,请指出我在正确的地方。

2 个答案:

答案 0 :(得分:2)

请记住,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 - 组中的观察次数,_nby - 组中当前观察的次数。)< / p>

然后,您可以使用if class==#将其子集化为感兴趣的类,如您所知。

答案 1 :(得分:0)

还可以使用groups查看可下载的ssc inst groups命令。