【问题标题】:Creating a dummy variable for specific calendar day为特定日历日创建虚拟变量
【发布时间】:2014-07-31 16:51:51
【问题描述】:

在 Stata 中,我想为每月的第 25 个日历日或前一个工作日(如果该日历日是周末或节假日)生成指标。我在 Stata 中使用一个业务日历,它会为非工作日生成缺失值。

什么是最有效的脚本,而不是迭代地做这样的事情:

gen d25 = d == 25
replace d25 = cond(d[_n+1]==25 & date[_n+1]==.,1,d25)

Etc... 

【问题讨论】:

  • 我更改了看似非法的语法。如果这不是您的意思,请还原并修复。

标签: date stata


【解决方案1】:

这是一个如何做到这一点的示例:

sysuse sp500, clear
keep date

gen in_bcal=1
tsset date
tsfill
gen day25=cond(day(date)==25,1,0)
drop if missing(in_bcal) & day25==0 
sort date
replace day25=day25[_n+1] if missing(in_bcal[_n+1])
drop if missing(in_bcal)
drop in_bcal

这可能可以用更聪明的方式来完成。

【讨论】:

  • 如果系列的最后日期与被标记的日期重合,则会出现一个小故障。我在答案中评论了更多。
【解决方案2】:

作为@Dimitriy 回答的补充,我想解决两个问题:

1.我对原始发帖人问题的解释是,他开始时有一个商业日历。因此,问题在于标记一个月中的任意一天(数字),该日期可以或不可以出现在业务日历中。如果不存在,则我们标记前一个工作日。

如果是这种情况,那么我们需要对原始代码进行少量添加,因为如果涉及业务日历,tsfill 将无法按预期工作。 (sp500 数据库 date 变量不是 describe 将显示的业务日历。)例如:

clear all
set more off

*----- example data -----

set obs 19

gen bdate = _n
format bdate %tbsimple // format as "simple" business calendar

*----- tsfill -----

tsset bdate
tsfill

list

tsfill 在这种情况下不会填写任何内容;它不会填写非工作日。这些日子已经从日历上划掉了,所以没有什么可填写的。我们需要:

gen rdate = dofb(bdate, "simple")
format rdate %td

商务日历日期转换为常规日期。然后我们可以使用常规日期变量rdate 继续处理 Dimitriy 的代码。

2. 第二个问题是,如果系列的最后一次观察恰好是我们想要标记的那一天,那么 Dimitriy 的代码将导致缺失。这可以通过查找第 31 天而不是 25 天来检查。2001 年 12 月将缺少第 31 天。

下面是一个完整的示例,它解决了这两个问题,并且希望不会增加任何错误。当然,Dimitriy 将一般(正确)的想法归功于自己,任何错误都是我自己的。

clear all
set more off

*----- example data -----

set obs 19

gen bdate = _n
format bdate %tbsimple // format as "simple" business calendar

list, sep(0)

*----- what you want -----

gen rdate = dofb(bdate, "simple") // from business to regular
format rdate %td

tsset rdate
tsfill

gen day6 = (day(rdate) == 6)

drop if missing(bdate) & !day6
replace day6 = 1 if missing(bdate[_n+1]) & day6[_n+1] == 1
drop if missing(bdate)

list, sep(0)

【讨论】:

    猜你喜欢
    • 2021-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    相关资源
    最近更新 更多