月份编号到月份名称
Posted
技术标签:
【中文标题】月份编号到月份名称【英文标题】:Month Number to Month Name 【发布时间】:2021-04-29 20:09:02 【问题描述】:我正在尝试将月份数字转换为 Stata 中的月份名称,即 12 到 12 月(或 12 月)等等。
我知道我可以做一组替换 if。问题在于我必须在多个地方进行此修复,因此我的代码将变得庞大。
在 SAS 中我会做这样的事情
Month_Str = put(Month,monname3.);
Stata中是否有等价的功能?
【问题讨论】:
【参考方案1】:这是一种解决方案。您可以使用 Stata 的 c-class (help creturn
) 来获取按时间顺序排列的月份列表。然后使用它们在列表中的位置来填充字符串值。
//Sample Data
clear
set obs 10
gen month = runiformint(1,12)
gen month_str = ""
forval m = 1/12
local month_full: word `m' of `c(Months)'
replace month_str = "`month_full'" if month == `m'
在这里,您可以改用 c(Mons)
,这将为您提供 3 个字母的缩写(例如,八月的八月)。我很好奇我是否有人有另一种方法。我通常经常做这个数字到字符串的月份映射,所以我只保存了一个dta
,我将在m:1
上合并。
【讨论】:
【参考方案2】:我可以很容易地想象为什么您或您的用户可能更喜欢在输出中看到(比如)Jan
或 January
而不是 1
。我很难想象为什么您可能希望将一年中的月份存储为字符串。它们不会按任何自然顺序排序,因此它们对图形或表格没有多大用处,而且它们占用更多内存。
要以这种方式查看月份,您可以定义值标签。假设您有 month
作为整数变量,其值为 1 到 12:
tokenize "`c(Mons)'"
forval m = 1/12
label def month `m' "``m''", add
label val month month
Stata 没有将月份编号映射到月份名称字符串的内置函数,我不记得被要求这样做,这符合人们认为它不是真正需要或没有帮助的偏见。要提供您自己的显示,您需要几行代码,但无论是这个解决方案还是@JR96 在他们的回答中的解决方案都不会导致“巨大”的代码。
这种方法的一个优点是您可以使用适合任何语言的名称或缩写,而不是从 c(Mons)
开始,而是从您自己喜欢的名称或缩写列表开始。
【讨论】:
以上是关于月份编号到月份名称的主要内容,如果未能解决你的问题,请参考以下文章