首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在使用tabulate时,有没有办法克服Stata中“值太多”的错误?

在使用tabulate时,有没有办法克服Stata中“值太多”的错误?
EN

Stack Overflow用户
提问于 2014-03-03 23:40:56
回答 2查看 20.5K关注 0票数 4

我正在尝试为Stata中的一个变量生成频率,条件是另一个变量的类别。

另一个分类变量对我感兴趣的类别有大约79万个观察值。

Stata对单向表和双向表分别有12,000行和1,200行的限制,这使得这是不可能的。

每次运行tab x if y==<category of interest>时,我都会得到以下错误:

代码语言:javascript
运行
复制
too many values
r(134);

我安装了bigtab包,虽然它提供了表,但它不能与by一起使用,也不能运行统计测试。

有没有解决这个问题的办法?

当SAS甚至SPSS都可以毫无问题地运行完全相同的操作时,Stata竟然会有这个任意的限制,这似乎很愚蠢。

EN

回答 2

Stack Overflow用户

发布于 2014-03-04 00:40:22

对于一些人来说,人们想要超过12000行的表似乎很愚蠢,或者至少令人困惑,因为必须有一种更好的方法来显示结果或回答所考虑的问题。

也就是说,tabulate的局限性是根深蒂固的。但你只需要考虑重现你想要展示的东西。因此,对于单向频率

代码语言:javascript
运行
复制
. bysort rowvar : gen freq = _N
. by rowvar : gen tag = _n == 1 
. gsort -freq rowvar 
. list rowvar freq if tag, noobs   

对于双向频率

代码语言:javascript
运行
复制
. bysort rowvar colvar : gen freq = _N
. by rowvar colvar : gen tag = _n == 1 
. gsort -freq rowvar colvar
. list rowvar freq if tag, noobs 

一种类似的方法是在groups中编写更多花哨的代码。在许多方面,一种更简单的方法是先对数据集执行collapsecontract操作,然后对其执行list操作。

要在此处标记一般策略,请执行以下操作:

  1. 会生成您想要的新变量。
  2. 如果有多个观察值,则只从每个组中选择一个观察值。
  3. list,而不是tabulate

更新

OP已询问

代码语言:javascript
运行
复制
. bysort rowvar : gen freq = _N 

OP:这将为我的rowvar中每个值的最后一次计数生成freq变量

我:没有。freq变量是rowvar的每个不同值的观测值的计数。

代码语言:javascript
运行
复制
. by rowvar : gen tag = _n == 1 

OP:这将为rowvar中每个唯一观察值的第一次计数生成tag变量。

我:正确,只要你说的是“独特的”,而不是“独特的”。唯一值只出现一次。

代码语言:javascript
运行
复制
. gsort -freq rowvar 

OP:按降序对freqrowvar进行排序

Me:它对常量freq块中的freq进行降序排序,对rowvar进行升序排序。

代码语言:javascript
运行
复制
 . list rowvar freq if tag, noobs 

OP:if在这里做什么?

我:这个留下来做练习吧。

票数 5
EN

Stack Overflow用户

发布于 2014-11-10 04:42:57

使用命令bigtab。(您必须首先安装软件包:运行ssc install bigtab。)如需帮助,请键入h bigtab

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22150947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档