Tabs 带零的Stata表格

Tabs 带零的Stata表格,tabs,stata,Tabs,Stata,我对Stata和命令有问题: svy: tab x 当给定的x没有观测值时 我的问题是,当一个类别没有观测值时,Stata只会删除相应的行 我的任务是运行几个表格,并将关键结果保存并导出到csv文件。有时存储的向量有n个元素,而有时由于零,它们只有n-1个元素,因此我不知道如何将它们组合到一个更大的矩阵中(或者至少将其导出到一个文件中,行间距规则,如果没有观测值,则值为0)。 我也试过了 estpost svy, subpop(x0): tab x, count se format(%10.4

我对Stata和命令有问题:

svy: tab x
当给定的
x
没有观测值时

我的问题是,当一个类别没有观测值时,Stata只会删除相应的行

我的任务是运行几个表格,并将关键结果保存并导出到csv文件。有时存储的向量有n个元素,而有时由于零,它们只有n-1个元素,因此我不知道如何将它们组合到一个更大的矩阵中(或者至少将其导出到一个文件中,行间距规则,如果没有观测值,则值为0)。 我也试过了

estpost svy, subpop(x0): tab x, count se format(%10.4g)
但是我仍然有同样的问题。

更新3 此解决方案基于
estpost svy:tab
,因为该命令返回的可用结果向量比
svy:tab
本身更多。与以前的版本一样,此解决方案将所有这些结果放入Stata数据集中。它在使用循环之前添加了一个检查数据是否包含缺少的类别的方法,并稍微收紧了循环限制。根据Nick的建议,缺失值将替换所有与标准错误相关的统计数据。注意

 estpost svy: tab rep78
默认情况下,将估计的单元格比例放入
e(b)
,将其标准错误放入
e(se)
,而

 estpost svy: tab rep78, count
将估计的计数及其SEs放入这些矩阵中。但是,另一个摘要仍然可用,可以在
e(单元格)
e(计数)
中找到

更新2:这是一个版本,它在Mata中完成了大部分工作,然后将估计值保存到Stata数据集中。我稍微更改了矩阵的名称

 sysuse auto, clear
 svyset _n
 drop if rep78== 2 | rep78==5
 svy: tab rep78, count se
 local maxcat =5

 mata:
 r = st_matrix("e(Row)")'
 ct = st_matrix("e(Obs)")
 serr= sqrt(diagonal(st_matrix("e(V)")))
 d = J(`maxcat',3,0)
 for (j = 1; j<=`e(r)'; j++) {
     for (k = 1; k<=`maxcat'; k++) {
         d[k,1] = k
         if (r[j,1]== k) {
            d[k,2] =   ct[j,1]
            d[k,3] = serr[j,1]
         }
    }
  }
 end
 clear
 getmata (rep78 count se) = d
 replace se = . if count==0
 format se %8.2f
 list
 save results, replace
sysuse自动,清除
斯维塞特
如果rep78==2 | rep78==5,则删除
svy:制表符rep78,计数se
本地最大值=5
马塔:
r=st_矩阵(“e(行)”)
ct=st_矩阵(“e(Obs)”)
serr=sqrt(对角线(st_矩阵(“e(V)”))
d=J(`maxcat',3,0)
对于(j=1;j更新3
此解决方案基于
estpost svy:tab
,因为该命令返回的可用结果向量比
svy:tab
本身更多。与上一版本一样,此解决方案将所有这些结果放入Stata数据集中。它在诉诸循环之前添加了一个检查数据是否包含缺少的类别的方法,并收紧了循环限制很小。按照Nick的建议,缺失的值将替换所有与标准错误相关的统计数据。请注意

 estpost svy: tab rep78
默认情况下,将估计的单元格比例放入
e(b)
,将其标准错误放入
e(se)
,而

 estpost svy: tab rep78, count
将估计的计数及其SEs放入这些矩阵中。但是另一个摘要仍然可用,可以在
e(单元格)
e(计数)
中找到

更新2:这是一个版本,它在Mata中完成了大部分工作,然后将估计值保存到Stata数据集中。我稍微更改了矩阵的名称

 sysuse auto, clear
 svyset _n
 drop if rep78== 2 | rep78==5
 svy: tab rep78, count se
 local maxcat =5

 mata:
 r = st_matrix("e(Row)")'
 ct = st_matrix("e(Obs)")
 serr= sqrt(diagonal(st_matrix("e(V)")))
 d = J(`maxcat',3,0)
 for (j = 1; j<=`e(r)'; j++) {
     for (k = 1; k<=`maxcat'; k++) {
         d[k,1] = k
         if (r[j,1]== k) {
            d[k,2] =   ct[j,1]
            d[k,3] = serr[j,1]
         }
    }
  }
 end
 clear
 getmata (rep78 count se) = d
 replace se = . if count==0
 format se %8.2f
 list
 save results, replace
sysuse自动,清除
斯维塞特
如果rep78==2 | rep78==5,则删除
svy:制表符rep78,计数se
本地最大值=5
马塔:
r=st_矩阵(“e(行)”)
ct=st_矩阵(“e(Obs)”)
serr=sqrt(对角线(st_矩阵(“e(V)”))
d=J(`maxcat',3,0)

对于(j=1;jSee用于相同的问题,尽管没有
svy
元素。例如,所提到的
tabcount
程序不支持
svy
。请参阅用于相同的问题,尽管没有
svy
元素。例如,所提到的
tabcount
程序不支持
svy
。Steve:Helpful代码,但这是一个诡辩,即使你是这里的
svy
专家。计数为零并不意味着标准误差也为零,除非相关的零是结构性的(例如怀孕男性)。否则,任何要求查看缺失类别行的人都可能认为该类别是可能的。我暂时建议将SE报告为缺失,因为我们只知道它是某个正数(而不是零).我同意,尼克,我确实在
mata
块外将SEs设置为missing。我认为这是最好、最简单的方法。还有其他可选的统计信息,例如
ci
,需要相同的处理。在
mata
块内处理它们会很麻烦。与从
svy:tab返回的向量不同e> ,那些来自
estpost svy:tab
的包括置信上限和置信下限。我会修改以包括它们。史蒂夫:代码很有用,但另一方面是一个诡辩,即使你是这里的
svy
专家。计数为零并不意味着标准错误也为零,除非相关的零是结构性的(例如怀孕的男性)。否则,任何要求查看缺失类别行的人都可能认为该类别是可能的。我暂时建议将SE报告为缺失,因为我们只知道它是某个正数(而不是零).我同意,尼克,我确实在
mata
块外将SEs设置为missing。我认为这是最好、最简单的方法。还有其他可选的统计信息,例如
ci
,需要相同的处理。在
mata
块内处理它们会很麻烦。与从
svy:tab返回的向量不同e> ,来自
estpost svy:tab
的包括置信上限和置信下限。我将修改以包括它们。