Stata 循环日期
我正试着在斯塔塔重复约会 我有一个问题,因为我认为我的字符串变量被识别为日期类型 比如说,Stata 循环日期,stata,Stata,我正试着在斯塔塔重复约会 我有一个问题,因为我认为我的字符串变量被识别为日期类型 比如说, forvalues day = 1/31 { if `day' < 10 { local file_date ="2017-07-0`day'" di `file_date' } else { local file_date ="2017-07-`day'" di `file_date' }
forvalues day = 1/31 {
if `day' < 10 {
local file_date ="2017-07-0`day'"
di `file_date'
}
else {
local file_date ="2017-07-`day'"
di `file_date'
}
*insert operation here
}
forvalues day=1/31{
如果“天”小于10{
本地文件日期=“2017-07-0‘天”
di‘存档日期’
}
否则{
本地文件_date=“2017-07-‘天’”
di‘存档日期’
}
*在此插入操作
}
正在打印2009、2008、2007等
即使结果应为2017-07-01、2017-07-02等
有人知道为什么会这样吗
顺便说一下
forvalues day=1/31 {
if `day' < 10 {
local file_date ="2017070`day'"
di `file_date'
}
else {
local file_date ="201707`day'"
di `file_date'
}
*insert operation here
}
forvalues day=1/31{
如果“天”小于10{
本地文件\u date=“2017070`天”
di‘存档日期’
}
否则{
本地文件\u date=“201707`天”
di‘存档日期’
}
*在此插入操作
}
工作正常,但我希望在变量中使用连字符。可以先排除一些小的混淆:
di
(display
)命令现在读取
di 2017-07-01
你倾向于将其视为约会,但display
无法读懂你的心思。它看到一个要计算的表达式;这是它的工作的一部分,作为一个计算器,然后显示结果。因此,它看不到连字符,而是负号(数字中始终允许使用前导零,就像0.1和0.1一样)。所以,它被评估为2017减去7减去1,为什么你看到2009年应该是清楚的
解决方案很简单:使用“”
向显示
指示您将字符视为一个文本字符串,以便在出现时显示
下面是我将如何重写您的代码:
forvalues day = 1/31 {
local Day : di %02.0f `day'
local file_date "2017-07-`Day'"
di "`file_date'"
*insert operation here
}
有关回路01、02、…、09、10、…,的更清洁方式,请参阅。。。31. 我知道是什么导致了这个错误。谢谢你提高了我对Stata的理解!