微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

月份编号到月份名称

如何解决月份编号到月份名称

我试图在 Stata 中将月份数字转换为月份名称,即 12 到 12 月(或 12 月)等等。

我知道我可以做一组替换 ifs。这样做的问题是我必须在多个地方进行此修复,因此我的代码将变得非常庞大。

在 SAS 中我会做这样的事情

Month_Str = put(Month,monname3.);  

Stata 中是否有等价的函数

解决方法

这是一种解决方案。您可以使用 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 个字母的缩写(例如,Aug 代表八月)。我很好奇我是否有人有另一种方法。我通常经常做这个数字到字符串月份的映射,所以我只保存一个 dta,我将在 m:1 上合并。

,

我很容易想象为什么您或您的用户可能更喜欢在输出中看到(比如)JanJanuary 而不是 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) 开始,而是从您自己喜欢的名称或缩写列表开始。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。