我正在尝试使用某些面板数据来维护表格。我输出的所有数据都很好,但是我很难显示正确的日期。我使用的方法如下:
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 */
答案 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文件,但这并不困难。同样,详细信息在帮助文件中。