【问题标题】:displaying dates of values - time series data显示值的日期 - 时间序列数据
【发布时间】:2014-07-02 19:55:03
【问题描述】:

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

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 */

【问题讨论】:

    标签: date calendar output time-series stata


    【解决方案1】:

    我不确定您要的是什么,但我的猜测是,在给定数字输入的情况下,您希望看到一个人类可读的表单日期作为输出。 (这是你的最后一句话。)所以简单地尝试一下:

    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 文件定义;该示例使用名为 simple 的内置日历。您可能需要制作自己的 .stbcal 文件,但这并不难。同样,详细信息在帮助文件中。

    【讨论】:

    • 感谢您的回复!我的问题是我试图在图表中使用工作日。因此,例如,在星期一我希望昨天引用前一个星期五,即 r(max)-3,但在星期二我想引用星期一,即 r(max)- 1.这有意义吗?
    • 运行help datetime business calendars。这就是我的回答的结尾,并且正是处理这些情况。
    • 对不起,如果我遗漏了一些明显的东西 - 但我看不出这对日期输出有何帮助。例如,在星期一显示 r(max) - 1 仍将显示星期日日期。有没有更好的方法来引用输出的日期值?
    • 我在答案中添加了应该有帮助的信息。
    猜你喜欢
    • 2018-02-02
    • 2017-04-23
    • 2022-01-03
    • 2019-12-19
    • 1970-01-01
    • 2014-02-11
    • 1970-01-01
    • 2014-01-19
    • 1970-01-01
    相关资源
    最近更新 更多