按日期变量对数据进行子集化(Stata)

Subsetting data by date variables (Stata)

我想查看给定周或月的工人数量。数据浏览器中的月份变量看起来像“Jan2018”,而周变量像“06jan2018”。

为了计算给定一周的工人数量,我 运行 下面的代码:

preserve
    keep if week==06jan2018
    distinct union_workers
restore

我收到以下错误“06jan2018 无效名称”。

周和月变量如下所示:

*Example generated by -dataex-. To install: ssc install dataex
clear
input float week int month
21211 696
21211 696
21211 696
21204 696
21211 696
21190 696
21204 696
21190 696
21190 696
21190 696
21211 696
21204 696
21211 696
21204 696
end

format %td week
format %tmMonYY month
describe month week

              storage   display    value
variable name   type    format     label      variable label
--------------------------------------------------------------------------------------------------------------------------------------------
month           int     %tmMonYY              
week            float   %td                   

考虑到上面列出的周和月变量的格式,计算给定日期的工人数量和数据子集的最佳方法是什么?

出现错误的原因是,在 week==06jan2018 中,您测试了变量 week 与变量 06jan2018 相似的所有值。我知道这不是你的意思,而是你告诉你的代码要做的。我知道您没有名为 06jan2018 的变量,并且您不能像在 Stata 中那样使用以数字开头的变量名称。

如果您的变量 week 是一个字符串变量(文本变量),那么您可以 week=="06jan2018"week 与字符串 06jan2018 进行比较。但是,您的变量是具有显示格式的数字。这是在 Stata 中处理日期的最有效方式,但您需要了解您只能对基础值而不是显示格式进行条件操作。日期 2018 年 1 月 6 日对应于 Stata 中的 21190。请参阅您自己的 dataex 示例和 read the documentation for how to work with dates in Stata.

所以你可以这样做:

preserve
    keep if week==21190
    distinct union_workers
restore

但这是否是最佳做法取决于您打算如何使用此计数。您是将其转移到 paper/Word 文档,还是将其合并回工作数据集?

请注意,变量 week 存储为 float,而不是字符串。 06jan2018 只是变量中基础日期值的格式化显示,类似于标记的整数。

要引用本周的观测值,需要使用浮点值,即06jan2018这一周为21190。所以下面的代码应该可以工作:

preserve

    keep if week == 21190 
    distinct union_workers

restore