我转到了一个Stata视频“数据管理:如何从由查克·胡伯存储为字符串的日期创建日期变量”,以确保我的日期变量的格式正确,但是,我无法向我展示要显示为一年(例如2018年)的重新格式化变量(school_year2)。
有人能让我知道我在这里可能错过了什么吗?
谢谢,
.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文件结束
发布于 2022-03-25 21:38:32
在使用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开始显示为年份(在这种情况下,如果将其显示为其基本编号,则该日期将是相同的)。
发布于 2022-03-26 00:56:41
@这只熊已经解释了要点,但这个故事讲的有点不同,以防有帮助。
这里的谬误是改变(显示)格式就是改变格式。它对存储的内容没有任何影响,即对问题中变量内数据的值没有影响。
您正在使用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本论文认为显示格式的改变只是这样,而不影响存储的值。
https://stackoverflow.com/questions/71623078
复制相似问题