如何解决月份编号到月份名称
我试图在 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
上合并。
我很容易想象为什么您或您的用户可能更喜欢在输出中看到(比如)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)
开始,而是从您自己喜欢的名称或缩写列表开始。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。