我转向Stata视频"数据管理:如何从Chuck Huber存储为字符串的日期创建日期变量";然而,为了确保我的日期变量格式正确,我无法向我显示重新格式化的变量(school_year2(以显示为年份(例如2018(。
有人能告诉我这里可能缺少什么吗?
谢谢你,
.do文件
gen school_year2 = date(school_year,"Y")
format %ty school_year2
list school_year school_year2 in 1/10
+---------------------+
| school~r school~2 |
|---------------------|
1. | 2016 2.0e+04 |
2. | 2016 2.0e+04 |
3. | 2016 2.0e+04 |
4. | 2016 2.0e+04 |
5. | 2016 2.0e+04 |
|---------------------|
6. | 2016 2.0e+04 |
7. | 2016 2.0e+04 |
8. | 2016 2.0e+04 |
9. | 2016 2.0e+04 |
10. | 2016 2.0e+04 |
+---------------------+
do文件结束
使用date()
函数时,基础数据的值仍然是从1960年1月1日起的天数。所以保持%td
,因为你在这里工作的是天,而不是年。但您可以决定只显示年份,使用代表世纪的%tdCCYY
C
和代表年份的Y
。但请记住,基本数据点仍然是2016年1月1日,而不是2016年
clear
input str4 school_year
"2016"
"2016"
"2016"
"2016"
"2016"
"2016"
"2016"
"2016"
"2016"
"2016"
end
gen school_year2 = date(school_year,"Y")
format %tdCCYY school_year2
list school_year school_year2 in 1/10
如果您只想使用年份,则使用year()
函数从日期开始获取年份。下面的例子详细介绍了你可以玩的步骤。
clear
input str4 school_year
"2016"
"2016"
"2016"
"2016"
"2016"
"2016"
"2016"
"2016"
"2016"
"2016"
end
gen school_year2 = date(school_year,"Y")
gen school_year3 = year(school_year2)
format %tdCCYY school_year2
format %ty school_year3
list in 1/10
请注意,在上一个示例中,所有值对您来说都是相同的。但是第一个变量是一个字符串,其文本为";2016";,第二个是从1960年1月1日起存储为天数的日期,只显示其年份值,最后一个是从0年起显示为年份的数字(在这种情况下,如果它被显示为其基本数字,则该数字将是相同的(。
@TheiceBear已经解释了要点,但这里的故事有点不同,以防有帮助。
这里的谬论是,改变(显示(格式只是格式的改变。它对存储的内容没有影响,也就是说,对问题中变量中的数据值没有影响。
您正在使用generate
来创建新的变量,这很好,但可以直接使用标量常数上的di
(display
(来查看基本原理。这也是检查对Stata规则理解的一个好方法。
date()
函数(尽管其历史名称(用于创建数字每日日期(仅(。如果您告诉date()
,您的输入是一个仅包含年份的字符串,则它将1月1日估算为日和月。结果是一个整数,从1960年1月1日的小数点开始计算。
. di date("2016", "Y")
20454
. di date("1 Jan 2016", "DMY")
20454
. di date("1 Jan 1960", "DMY")
0
可以肯定的是,很少有人愿意或能够在这样的规模上计算出20454是什么,但你可以指定一个每日日期显示格式,这样你和代码的读者就可以直接看到。
. di %td 20454
01jan2016
显示每日日期(或其中的一部分,如每月或每年的日期(有许多细微的变化。每日日期的不同格式名称都从%td
开始。
相反,如果你说值20454将使用年度格式显示,那么你指的是未来几千年后的20454年。Stata并没有表现出困惑,只是它不期望年份这样的值,只是向你显示一年四舍五入到2.0e+04,也就是20000。如果你有充分的理由在数千年或数百万年后使用日期,那么日期显示格式可能既不需要也没有帮助。
. di %ty 20454
2.0e+04
这篇论文重复了这样一种观点,即显示格式的更改只是这样,不会影响存储值。