我正在尝试为Stata中的一个变量生成频率,条件是另一个变量的类别。
另一个分类变量对我感兴趣的类别有大约79万个观察值。
Stata对单向表和双向表分别有12,000行和1,200行的限制,这使得这是不可能的。
每次运行tab x if y==<category of interest>
时,我都会得到以下错误:
too many values
r(134);
我安装了bigtab
包,虽然它提供了表,但它不能与by
一起使用,也不能运行统计测试。
有没有解决这个问题的办法?
当SAS甚至SPSS都可以毫无问题地运行完全相同的操作时,Stata竟然会有这个任意的限制,这似乎很愚蠢。
发布于 2014-03-04 00:40:22
对于一些人来说,人们想要超过12000行的表似乎很愚蠢,或者至少令人困惑,因为必须有一种更好的方法来显示结果或回答所考虑的问题。
也就是说,tabulate
的局限性是根深蒂固的。但你只需要考虑重现你想要展示的东西。因此,对于单向频率
. bysort rowvar : gen freq = _N
. by rowvar : gen tag = _n == 1
. gsort -freq rowvar
. list rowvar freq if tag, noobs
对于双向频率
. bysort rowvar colvar : gen freq = _N
. by rowvar colvar : gen tag = _n == 1
. gsort -freq rowvar colvar
. list rowvar freq if tag, noobs
一种类似的方法是在groups
中编写更多花哨的代码。在许多方面,一种更简单的方法是先对数据集执行collapse
或contract
操作,然后对其执行list
操作。
要在此处标记一般策略,请执行以下操作:
list
,而不是tabulate
。更新
OP已询问
. bysort rowvar : gen freq = _N
OP:这将为我的rowvar
中每个值的最后一次计数生成freq
变量
我:没有。freq
变量是rowvar
的每个不同值的观测值的计数。
. by rowvar : gen tag = _n == 1
OP:这将为rowvar
中每个唯一观察值的第一次计数生成tag
变量。
我:正确,只要你说的是“独特的”,而不是“独特的”。唯一值只出现一次。
. gsort -freq rowvar
OP:按降序对freq
和rowvar
进行排序
Me:它对常量freq
块中的freq
进行降序排序,对rowvar
进行升序排序。
. list rowvar freq if tag, noobs
OP:if
在这里做什么?
我:这个留下来做练习吧。
发布于 2014-11-10 04:42:57
使用命令bigtab
。(您必须首先安装软件包:运行ssc install bigtab
。)如需帮助,请键入h bigtab
。
https://stackoverflow.com/questions/22150947
复制相似问题