下面给出 Stata 15-17 和 Stata 18+ 都能用的三段式代码,把 “2023-05” 这类 %tm 格式的年月变量 一键拆成 数值型 year 和 month;同时把 “202305” 这种纯数字 也一并解决。直接复制即可跑通。
✅ 场景 1:变量已是 %tm 格式(如 2023m5)
stata
* 假设变量名为 ymgen year = year(dofm(ym)) // 2023gen month = month(dofm(ym)) // 5
dofm() 先把 %tm → %td(当月 1 号),再用 year()/month() 提取 。
✅ 场景 2:变量是字符串 “2023-05”
stata
* 1) 先转为 %tmgen ym_tm = monthly(string_ym, "YM")format ym_tm %tm
* 2) 再拆gen year = year(dofm(ym_tm))gen month = month(dofm(ym_tm))
✅ 场景 3:变量是纯数字 202305
stata
* 假设数值变量为 ym_numgen year = int(ym_num/100) // 2023gen month = mod(ym_num,100) // 5
一键检验
stata
list ym year month in 1/5
懒人命令(Stata 18+)
Stata 18 起可直接:
stata
split ym, parse(m) destring gen(tmp)rename tmp1 yearrename tmp2 month
一句话总结
变量是 %tm 用 dofm();字符串先 monthly();纯数字直接 int/mod。