显示值的日期 - 时间序列数据

时间:2014-05-14 16:21:13

标签: date calendar output time-series stata

我正在尝试使用某些面板数据来维护表格。我输出的所有数据都很好,但是我很难显示正确的日期。我使用的方法如下:

gen ymdny = date(date,"MDY"); /*<- date var from panel dataset that i import*/
sort name ymdny;
summ ymdny;
local lastdate : disp %tdM-D r(max);
local lastdate2 : disp %tdM-D (r(max)-1);
local lastw : disp %tdM-D (r(max)-7);

如果数据是每天都可以正常工作,但我拥有的数据集实际上是每天的业务(即周末和银行国家法定节假日缺失)。这看起来很愚蠢,但我还是找不到能够完成工作的解决方法。理想情况下 - 我可以使用一个函数将相应的日期打印到特定值。

例如:

gen resbal_1d = round(l1.resbal,0.1);
gen dateOf = dateOf(resbal_1d); /* <- pseudocode example of what I would like */

1 个答案:

答案 0 :(得分:3)

我不确定你要求的是什么,但我的猜测是你希望看到一个人类可读的表格日期作为输出,给定一个数字输入。 (这是你的最后一句话。)所以只需尝试类似:

display %td 10

格式非常重要,如下所示(请参阅help format):

display %tq 10

相同的数字输入,不同的格式,不同的输出。

手册中的另外两个例子:

* string to integer 
display date("5-12-1998", "MDY")

* string to date format
display %td date("5-12-1998", "MDY")

至于你的示例代码,我没有得到你的目标。实际上,您可以汇总date变量,因为在Stata中,日期只是整数。这是合法的,但不能说它是否是好的形式。下面是一个简单的例子。

clear all
set more off

set obs 10

gen date = _n // create the data
format date %td // give date format

list

summarize date
local onedate = r(max) 

display %td `onedate'

一些参考文献:

[U] 24 Working with dates and time

help datetime

help datetime business calendars

http://www.stata.com/support/faqs/data-management/creating-date-variables/

http://www.ats.ucla.edu/stat/stata/modules/dates.htm

(也许你可以用更多的细节和背景来解释你想要的东西。)

修改

您的评论

  

我看不出这对日期输出有何帮助。例如,   在星期一显示r(max) - 1仍将显示星期日。

根本没有解释您使用Stata的商业日历所遇到的问题。

我正在添加基本上从我已经引用的帮助文件中获取的示例。我这样做是为了让你相信(重新)读取帮助文件是值得的。

*clear all
set more off

* import string dates
infile str10 sdate float x using http://www.stata-press.com/data/r13/bcal_simple

list

*----- Regular dates -----

* create elapsed dates - Stata's way of managing dates
generate rdate = date(sdate, "MD20Y")
format rdate %td

drop sdate x

list

* compute previous and next dates
generate tomorrow1  = rdate + 1
format tomorrow1 %td

generate yesterday1 = rdate - 1
format yesterday1 %td

list

*----- Business dates -----

* convert regular date to business dates
generate bdate = bofd("simple", rdate)
format bdate %tbsimple

* compute previous and next dates
generate tomorrow2  = bdate + 1
format tomorrow2 %tbsimple

generate yesterday2 = bdate - 1
format yesterday2 %tbsimple

order yesterday1 rdate tomorrow1 yesterday2 bdate tomorrow2
list        

/*

              The stbcal-file for simple, the calendar shown below,

                               November 2011    
                        Su  Mo  Tu  We  Th  Fr  Sa
                        ---------------------------
                                 1   2   3   4   X
                         X   7   8   9  10  11   X
                         X  14  15  16  17  18   X
                         X  21  22  23   X   X   X
                         X  28  29  30
                        ---------------------------
*/

请注意,如果您从常规日期添加或减去1,则不会考虑工作日。如果您使用业务日历日期执行相同操作,则可以获得所需内容。业务日历由.stbcal文件定义;该示例使用名为简单的内置日历。您可能需要制作自己的.stbcal文件,但这并不困难。同样,详细信息在帮助文件中。