1

以下是美国消费者支出调查(2011 年)第 2 页码本中两个样本变量的格式。62.

VARIABLE_NAME VARIABLE_DESCRIPTION Format Note
FEDRFNDX During the past 12 months, what was the total amount of refund received from Federal income tax by ALL CU members?
NUM(8)
FEDTAXX During the past 12 months, what was the total amount PAID for Federal income tax, in addition to that 
withheld from earnings, by ALL CU members?
NUM(8)

其中 CU 表示消费者单位(或家庭)。Stata 数据文件显示 FEDRFNDX 和 FEDTAXX 变量的以下格式:

FEDRFNDX    int     %8.0g
FEDTAXX long        %12.0g

我的问题是为什么这些变量的 Stata 格式不同,尽管它们在码本中都是 NUM(8) 并且都引用了 amount 。作为调查数据的最终用户,我们如何确定我们有正确的格式(例如,如果我们只是给定了上面的码本,比如 NUM(8) 和变量的起始位置加上 ascii 数据而不是统计数据)?

如果这个问题过于本地化,我深表歉意。

4

2 回答 2

4

该格式仅说明数据的显示方式,而不是存储方式。在这种情况下,格式是不同存储类型的默认格式:FEDRFNDX 存储为int,而 FEDTAXX 存储为long. 您可以通过输入 Stata 来了解更多关于差异的信息help data_types

我的猜测是

  1. 两者都可以安全地存储而int不会丢失信息

  2. 或 FEDRFNDX 仅具有小于 32,740 的整数值,这意味着它不使用码本为其保留的完整 8 位,而 FEDTAXX 使用大于 32,740 的整数。32,740 是可以存储在 (2 字节) 中的最大数字int,而 2,147,483,620 是 (4 字节) 的限制long

检查其中哪些是正确的安全方法是compress在加载数据集后键入。这会将每个变量的存储类型更改为可能的最低形式,而不会丢失信息。所以,如果我的第一个猜测是真的,它会将 FEDTAXX 的存储类型更改为int,而如果我的第二个猜测是真的,它将保持存储类型不变。

之后,只需键入tab FEDTAXX并查看值总是一个好主意。我喜欢用户编写的命令fre,因为它同时显示值和值标签。你可以通过输入 Stata 来获得ssc install fre

于 2013-06-16T08:12:49.983 回答
3

@Maarten Buis 给出了一个很好的具体答案。以下更一般的评论太长了,无法评论。

Stata 中的“格式”是什么,什么不是,这是几个误解的主题。最好的原因可能是“格式”在计算中的松散、不断变化的含义。不管是什么原因,这里特定意义上的格式在Stata中仅指显示格式。更改与变量关联的格式的主要方法是通过format命令,该命令的帮助是一个很好的起点。

显然,Stata 让许多用户感到惊讶,因为它的数据类型存储类型,使它们对用户相当可见,并且在选择存储类型时赋予用户一些相当大的责任。但是存储类型和格式之间的联系充其量是松散的,即不同的存储类型具有不同的默认格式。

重要的是要掌握改变 Stata 中的格式并不会改变存储的内容。

对中级和/或长期用户的理解测试是能够解释这里发生的事情

. set obs 1
obs was 0, now 1

. gen foo = 2000000001

. di %12.0f foo[1]
2000000000

为什么Stata(似乎)对那个大整数进行舍入?(提示:这不是错误,只是 Stata 遵循您对存储类型的默认说明。)

于 2013-06-16T09:44:59.383 回答