我有一个包含年份和月份的字符串变量:
clear
input str6 year
"2012m5"
"2013m9"
"2014m10"
"2015m12"
"2016m2"
"2017m8"
"2018m6"
end
当我应用previous question of mine中提供的解决方案时,结果没有意义:
g date = dofy(monthly(year, "YM") + 1 ) - 1
form date %td
l
+--------------------+
| year date |
|--------------------|
1. | 2012m5 31dec0628 |
2. | 2013m9 31dec0644 |
3. | 2014m1 31dec0648 |
4. | 2015m1 31dec0660 |
5. | 2016m2 31dec0673 |
|--------------------|
6. | 2017m8 31dec0691 |
7. | 2018m6 31dec0701 |
+--------------------+
有任何想法为什么会这样?
答案 0 :(得分:1)
您需要改用dofm()
函数:
generate wanted = dofm(monthly(year, "YM") + 1) - 1
format wanted %td
list, separator(0)
+--------------------+
| year wanted |
|--------------------|
1. | 2012m5 31may2012 |
2. | 2013m9 30sep2013 |
3. | 2014m1 31jan2014 |
4. | 2015m1 31jan2015 |
5. | 2016m2 29feb2016 |
6. | 2017m8 31aug2017 |
7. | 2018m6 30jun2018 |
+--------------------+
答案 1 :(得分:1)
@PearlySpencer专注于做什么。在这里,我重点介绍代码中的错误。简单的命令使您可以查看已完成的操作并找出错误所在。
clear
input str6 year
"2012m5"
"2013m9"
"2014m10"
"2015m12"
"2016m2"
"2017m8"
"2018m6"
end
generate step1 = monthly(year, "YM")
list, sep(0)
+----------------+
| year step1 |
|----------------|
1. | 2012m5 628 |
2. | 2013m9 644 |
3. | 2014m1 648 |
4. | 2015m1 660 |
5. | 2016m2 673 |
6. | 2017m8 691 |
7. | 2018m6 701 |
+----------------+
monthly()
函数以0
为1960年1月的比例生成每月日期。
首先添加1
,然后再减去1
不会对主要错误产生任何实质性的影响,主要错误是将结果提供给dofy()
,该日期预计为一年(日期)作为输入,并产生每日日期作为输出。这就是为什么您多年来错误地获取每日约会的原因。