首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Stata 17中将重格式化字符串显示为四位数年份的问题

在Stata 17中将重格式化字符串显示为四位数年份的问题
EN

Stack Overflow用户
提问于 2022-03-25 21:03:34
回答 2查看 144关注 0票数 0

我转到了一个Stata视频“数据管理:如何从由查克·胡伯存储为字符串的日期创建日期变量”,以确保我的日期变量的格式正确,但是,我无法向我展示要显示为一年(例如2018年)的重新格式化变量(school_year2)。

有人能让我知道我在这里可能错过了什么吗?

谢谢,

.do文件

代码语言:javascript
复制
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文件结束

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-25 21:38:32

在使用date()函数时,从1960年1月1日起,底层数据的值仍然是几天。因此,保持%td在这里工作的日子,而不是几年。但是,您可以决定它只显示年份,使用%tdCCYY C表示世纪,使用Y表示年份。但请记住,基础数据点仍然是2016年1月1日,而不是2016年。

代码语言:javascript
复制
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()函数从日期开始获取年份。下面的示例详细介绍了您可以使用的步骤。

代码语言:javascript
复制
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开始显示为年份(在这种情况下,如果将其显示为其基本编号,则该日期将是相同的)。

票数 1
EN

Stack Overflow用户

发布于 2022-03-26 00:56:41

@这只熊已经解释了要点,但这个故事讲的有点不同,以防有帮助。

这里的谬误是改变(显示)格式就是改变格式。它对存储的内容没有任何影响,即对问题中变量内数据的值没有影响。

您正在使用generate创建新变量,这很好,但基本原则可以直接使用标量常量上的di (display)。这也是检验对Stata规则的理解的好方法。

date()函数--尽管它的历史名称--是用来创建数字日日期的(仅)。如果您告诉date()您的输入是一个只包含年份的字符串,那么它将1月1日计算为日期和月份。结果是一个整数,从1960年1月1日的比额表开始算起。

代码语言:javascript
复制
. di date("2016", "Y")
20454

. di date("1 Jan 2016", "DMY")
20454

. di date("1 Jan 1960", "DMY")
0

可以肯定的是,很少有人愿意或能够计算出如此规模的20454,但您可以指定一种每日日期显示格式,以便您和代码的读者可以直接看到。

代码语言:javascript
复制
. di %td 20454
01jan2016

在这方面有许多细微的变化来显示每日日期(或其中的一部分,如月或年度日期)。每日日期的不同格式名称都会启动%td

相反,如果您说值20454将使用年度格式显示,则指的是进入未来几千年的20454年。Stata并不感到困惑,只是它不期望像几年这样的值,而只是显示出一年的四舍五入到2.0e+04,即20000。如果您有充分的理由使用几千年或数百万年以后的日期,则日期显示格式可能既不需要也不有用。

代码语言:javascript
复制
. di %ty 20454
2.0e+04

本论文认为显示格式的改变只是这样,而不影响存储的值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71623078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档