Re: [程式] sas時間格式處理問題

看板Statistics作者 (低點)時間15年前 (2010/06/06 03:23), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串4/4 (看更多)
※ 引述《rover99 (另一扇門)》之銘言: : 就我的認知 : 讀進資料格式要用informat : 將電腦資料顯示我們要的格式要用format : data aa; : informat date yymmdd10.; 正確來說,這裡下 informat date yymmdd8.; : format date yymmdd10.; : input date; : cards; : 19970422 : 20020808 : 19961025 : ; : run; : 藉由這篇文章 : 想衍生一下我遇到的問題 : 我有兩個變數 start_date, end_month : start_date 已讀入sas,設成日期格式,格式設成 yymmdd10. (ex:20090101) : end_month 已讀入sas,設成「數字」格式 (ex:200905) : 現在我想要計算start_date和end_month之間差了幾個月 : 理想狀況可以用 intck('month', start_date, end_month) : 所以想將end_month由「數字」格式轉成「日期格式」 : 試了幾種方法都失敗 : 想請問大家,我失敗的地方在哪邊? : 想法一: : end_date=compress(end_month||10); /*想將200905變成20090510*/ : informat end_date yymmdd10.; /*並且將20090510讓sas讀成日期格式*/ : 再用 intck('month', start_date, end_date) 來計算兩個日期格式的差異月數 : 不過...失敗 你還不懂"日期"跟"數字"的差異 並不是 數字的20090510 就可以說它是日期 前面有人說過了,SAS內日期是設定1960/1/1為1,餘類推 : 想法二: : end_date = end_month*100+10; : /*用compress函數行不通,我直接計算出20090510這個數字 XD*/ : informat end_date yymmdd10.; : 再用 intck('month', start_date, end_date) : 還是失敗 同上 : 看了上一篇i版友的回答 : 我試著用 MDY 這個函數產生 end_date ,結果是可行的 : 不過還是想討論看看,上述我兩種想法哪邊有問題 : 謝謝 試試這個吧: a = intck('month', start_date, input(put(end_date,z6.),yymmn6.)); 或 a = intck('month', start_date, mdy(mod(end_date,100),1,int(end_date/100))); -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.227.141.91 ※ 編輯: bugle 來自: 125.227.141.91 (06/06 03:36)

06/07 02:21, , 1F
感謝,轉換格式的細節真的要蠻小心的
06/07 02:21, 1F
文章代碼(AID): #1C2gGpck (Statistics)
文章代碼(AID): #1C2gGpck (Statistics)