👇 连享会 · 推文导航 | www.lianxh.cn
🍎 Stata:Stata基础 | Stata绘图 | Stata程序 | Stata新命令 📘 论文:数据处理 | 结果输出 | 论文写作 | 数据分享 💹 计量:回归分析 | 交乘项-调节 | IV-GMM | 时间序列 | 面板数据 | 空间计量 | Probit-Logit | 分位数回归 ⛳ 专题:SFA-DEA | 生存分析 | 爬虫 | 机器学习 | 文本分析 🔃 因果:DID | RDD | 因果推断 | 合成控制法 | PSM-Matching 🔨 工具:工具软件 | Markdown | Python-R-Stata 🎧 课程:最新专题 | 计量专题 | 关于连享会
🍓 课程推荐:2024 空间计量专题
主讲老师:范巧 (兰州大学)
课程时间:2024 年 10 月 2-4 日 (三天)
课程咨询:王老师 18903405450(微信)
课程特色 · 2024空间计量:
👉 一、从“零基础”到“高水平”的课程设计
兼顾基础知识、主流模型与前沿模型 既考虑软件安装、程序编写以及空间权重矩阵设计等 基础知识 讲授,更强调时空面板地理加权回归模型、贝叶斯空间计量模型、矩阵指数模型、空间计量交互模型与空间面板似不相关回归模型等 前沿模型 的传授。
👉 二、“保姆级”的空间计量代码
编写与校准所有模型的MATLAB代码,简化实操环节 模型的估计与检验等 仅按照提供的Excel数据版式 搜集与整理原始数据,即可一次性出结果并作图。
👉 三、“最多上新” 的内容体系
新增 矩阵指数模型、短面板空间似不相关模型、空间计量交互模型、贝叶斯空间计量模型等 新增 前沿应用案例,包括空间计量与索洛余值法、随机前沿分析与数据包络分析等的互嵌研究,阐释基于空间计量的产业空间结构优化评价方法。 新增 Dagum空间基尼系数、核密度估计、空间马尔科夫链与空间收敛性等内容,阐释现实研究中对空间收敛性的应用“谬误”。
作者:周小强 (中南财经政法大学)
邮箱:zhouxiaoqiang1017@163.com
编者按:本文主要摘译自下文,特此致谢!
Source:Cox, Nicholas J., Stata tip 145: Numbering weeks within months, Stata Journal, 2022(1): 224–230. -PDF-
目录
1. 应用场景
2. 前期准备
2.1 日期设定
2.2 命令一览
2.3 数据准备
3. 识别方法
4. 相关推文
温馨提示: 文中链接在微信中无法生效。请点击底部「阅读原文」。或直接长按/扫描如下二维码,直达原文:
1. 应用场景
用户拟生成一个变量来识别某具体日期落在当月的第几周。然而,关于「周」的不同定义,为识别造成了一定的困难。解决这一问题的关键在于厘清「周」是如何界定的,如下给出了关于「周」的三种界定情形:
第一,每月的第一周为当月的第1-7天,第二周为当月的第8-14天,以此类推。
第二,每月的第一周,从当月的第一个星期日开始,第一个星期六结束。第二周从当月的第二个星期日开始,第二个星期六结束。以此类推。
第三,每月的第一周,从当月的第一个星期一开始,第一个星期日结束。第二周从当月的第二个星期一开始,第二个星期日结束。以此类推。
本文的目标在于,对每一种定义,给出识别方案。
2. 前期准备
2.1 日期设定
在介绍如何识别某个具体日期位于当月的第几周前,可先了解Stata
对于日期的基本设定。在Stata
中,日期(某年某月某日)以整数形式保存,起始日期是1960年1月1日。具体来看,1960年1月1日
在Stata
中被保存为0,1960年1月2日
在Stata
中被保存为1,以此类推。
dis mdy(1,1,1960) //显示具体日期在Stata中对应的整数
0
dis mdy(1,2,1960) //显示具体日期在Stata中对应的整数
1
display mdy(12, 31, 2020) //显示具体日期在Stata中对应的整数
22280
2.2 命令一览
如下为本文在后续会用到的函数或命令。
命令 作用
mdy(月,日,年) 将月、日、年格式的日期换算为整数
%td 整数 将整数转换为日期
ym(年,月) 将年、月
ceil(x) 对参数x向上取整(如x=1.2,则返回2)
mofd(以整数形式保存的日期数据) 将以整数形式保存的日期数据转换为月份数据(此时月份仍以整数形式保存)
2.3 数据准备
本文以2021年1月1日-2021年3月31为例,识别每个具体日期处于当月的第几周。如下为生成的2021年1月1日-2021年3月31日(共90天)的日期数据。其中,变量ddate
表示具体的日期。
clear all
set obs 90 //设定拟生成的观测值个数
generate ddate = mdy(12, 31, 2020) + _n //生成2021年前90天的日期数据(此时的日期数据是以整数形式保存的)
format ddate %td //将整数形式保存的日期数据转换为日、月、年格式
generate mdate = mofd(ddate) //生成月份(此时的月份也是以整数的形式保存)
format mdate %tm //转换为年月格式
list in 1/10 //展示前10行观测值
+--------------------+
| ddate mdate |
|--------------------|
1. | 01jan2021 2021m1 |
2. | 02jan2021 2021m1 |
3. | 03jan2021 2021m1 |
4. | 04jan2021 2021m1 |
5. | 05jan2021 2021m1 |
|--------------------|
6. | 06jan2021 2021m1 |
7. | 07jan2021 2021m1 |
8. | 08jan2021 2021m1 |
9. | 09jan2021 2021m1 |
10. | 10jan2021 2021m1 |
+--------------------+
3. 识别方法
本部分主要讨论三种关于「周」的定义,并基于每种定义,给出识别的方案。
第一种: 最直接的定义是,每月第一周为当月的第1-7天,第2周是第8-14天,以此类推。
识别思路: 首先,利用函数
day
,识别具体日期位于当月的第几天(命名为变量dayth
);其次,用dayth
除以7
,若能整除,则将商
赋值给变量weekth1
,若不能,则将商+1
赋值给变量weekth1
,变量weekth1
表示的是具体日期位于当月的第几周。具体如下:
generate dayth = day(ddate) //每月的第几天
generate weekth1 = ceil(day/7) //每月的第几周
list in 1/10 //显示前10行观测值
+--------------------------------------+
| ddate mdate dayth weekth1 |
|--------------------------------------|
1. | 01jan2021 2021m1 1 1 |
2. | 02jan2021 2021m1 2 1 |
3. | 03jan2021 2021m1 3 1 |
4. | 04jan2021 2021m1 4 1 |
5. | 05jan2021 2021m1 5 1 |
|--------------------------------------|
6. | 06jan2021 2021m1 6 1 |
7. | 07jan2021 2021m1 7 1 |
8. | 08jan2021 2021m1 8 2 |
9. | 09jan2021 2021m1 9 2 |
1. | 10jan2021 2021m1 10 2 |
+--------------------------------------+
第二种: 每月的第一周,从当月的第一个星期日开始,第一个星期六结束。第二周从当月的第二个星期日开始,第二个星期六结束。以此类推。需要说明的是,按此定义,在第一个星期日前的月初几天会被定义为第0周。
识别思路: 首先, 利用
dow
函数,将具体日期转为星期数据(命名为week
),week=0
表示星期日,week=1~6
,分别表示星期一至星期六。其次, 生成标识星期日的变量sunday
,若对应的日期是星期日,则sunday=1
,否则,sunday=0
。最后, 使用求和命令sum
对变量sunday
进行累计求和,生成变量weekth_2
,该变量也标识了具体日期位于当月的第几周。具体代码如下:
gen week = dow(ddate) //week为0表示星期日,1~6为星期一~星期六
gen sunday = (dow(ddate) == 0) //若为星期日,则sunday=1;否则,sunday =0
bysort mdate: generate weekth_2 = sum(sunday) //按月份累计求和
list ddate mdate sunday weekth_2 in 1/10 //显示前10行观测值
+----------------------------------------+
| ddate mdate sunday weekth_2 |
|----------------------------------------|
1. | 01jan2021 2021m1 0 0 |
2. | 02jan2021 2021m1 0 0 |
3. | 03jan2021 2021m1 1 1 |
4. | 04jan2021 2021m1 0 1 |
5. | 05jan2021 2021m1 0 1 |
|----------------------------------------|
6. | 06jan2021 2021m1 0 1 |
7. | 07jan2021 2021m1 0 1 |
8. | 08jan2021 2021m1 0 1 |
9. | 09jan2021 2021m1 0 1 |
10. | 10jan2021 2021m1 1 2 |
+----------------------------------------+
第三种: 每月的第一周,从当月第一个星期一开始,第一个星期日结束。第二周从当月第二个星期一开始,第二个星期日结束。以此类推。
识别思路: 首先, 利用函数
dow
,将具体日期转为星期数据(命名为week
),week=0
表示星期日,week=1~6
,分别表示星期一至星期六。其次, 生成标识星期一的变量monday
,若对应的日期是星期一,则monday=1
,否则,monday=0
。最后, 使用求和命令sum
对变量monday
进行求和,生成变量weekth_3
,该变量也标识了具体日期位于当月的第几周。具体代码如下:
gen monday = (dow(ddate) == 1) //若为星期一,则monday=1;否则,monday =0
bysort mdate: generate weekth_3 = sum(monday) //识别具体日期位于当月的第几周
list ddate mdate week monday weekth_3 in 1/10
+-----------------------------------------------+
| ddate mdate week monday weekth_3 |
|-----------------------------------------------|
1. | 01jan2021 2021m1 5 0 0 |
2. | 02jan2021 2021m1 6 0 0 |
3. | 03jan2021 2021m1 0 0 0 |
4. | 04jan2021 2021m1 1 1 1 |
5. | 05jan2021 2021m1 2 0 1 |
|-----------------------------------------------|
6. | 06jan2021 2021m1 3 0 1 |
7. | 07jan2021 2021m1 4 0 1 |
8. | 08jan2021 2021m1 5 0 1 |
9. | 09jan2021 2021m1 6 0 1 |
10. | 10jan2021 2021m1 0 0 1 |
+-----------------------------------------------+
4. 相关推文
Note:产生如下推文列表的 Stata 命令为:
lianxh 日期 求和,m
安装最新版 lianxh 命令:
ssc install lianxh, replace
专题:数据处理 Stata 日期格式转换 Stata数据处理:各种求和方式一览 Stata:文字型日期格式的转换
🍓 课程推荐:2024 空间计量专题
主讲老师:范巧 (兰州大学)
课程时间:2024 年 10 月 2-4 日 (三天)
课程咨询:王老师 18903405450(微信)
New! Stata 搜索神器:
lianxh
和songbl
GIF 动图介绍
搜: 推文、数据分享、期刊论文、重现代码 ……
👉 安装:
. ssc install lianxh
. ssc install songbl
👉 使用:
. lianxh DID 倍分法
. songbl all
🍏 关于我们
连享会 ( www.lianxh.cn,推文列表) 由中山大学连玉君老师团队创办,定期分享实证分析经验。 直通车: 👉【百度一下: 连享会】即可直达连享会主页。亦可进一步添加 「知乎」,「b 站」,「面板数据」,「公开课」 等关键词细化搜索。