全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
1379 2
2015-04-11
附上
SPX500daliy.dta
大小:(155.56 KB)

 马上下载



問題:
日期資料(變數名為caldt)為 02jan2000 的形式,要怎麼轉換為20000102
我的作法:
gen newdate=10000*year(caldt)+100*month(caldt)+day(caldt)
但奇怪的是
算出來的結果會有誤差,有時會差1
舉例
05jan1926 經過轉換會得到19260104
我試過分別轉換年 月 日
gen year=year(caldt)  會得到1926
gen month=month(caldt) 會得到1
gen day=day(caldt) 會得到 5
但接下來的運算會得到有趣的現象
首先我測試
display 19260100+5  會得到19260105 無誤
接著測試
gen new=19260100+5 居然會得到 19260104 錯誤

請問各位大師,這應該如何是好?




二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2015-4-11 13:00:07
找到原因了!!!

各位大大在日期表達選擇用 19260102這種數值表示式需要注意變數的設定不能用float 而要用long
原因在於float 的精確度只到2^24 而剛剛的數值已超過了
故在運算上會發生問題。
如果將變數設定為double 或 long即可解決
希望這個可以幫助到大家
忘了提供指令

gen double newdate=10000*year(caldt)+100*month(caldt)+day(caldt)
或是
gen long newdate=10000*year(caldt)+100*month(caldt)+day(caldt)




二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-4-11 20:58:26
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群