【问题标题】:How to make a group by statement (from MySQL) in Stata?如何在Stata中按语句(来自MySQL)进行分组?
【发布时间】:2013-07-06 17:36:37
【问题描述】:

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

但是,现在我得到了一个 Stata 文件,我需要做一些分析。在 MySQL 中我知道该怎么做,但我被困在 Stata 并寻求您的帮助。

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

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相关的问题;这就是为什么我把它贴在这里。如果有更好的地方这样做,请指点我正确的地方。

【问题讨论】:

  • 这个答案有帮助吗? stackoverflow.com/questions/6151020/…
  • 这看起来很有希望,但我最终得到了成千上万个我无能为力的新变量或数据集。我仍然会尝试适应这一点。最后,我仍然需要做的就是将所有这些 mX 值相加。感谢您向我指出这个问题!
  • 人们确实会询问有关 Stata 的问题,但社区的专业知识有些有限。 Stata问题的第一站是statalist (stata.com/statalist)

标签: mysql group-by stata


【解决方案1】:

请记住,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 中的观察数量,_nby-group 中当前观察的数量。)

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

【讨论】:

  • 感谢 StasK,这正是我想要的。 by(s) 命令是我的新朋友。 ;)
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多