Re: [程式] sas時間格式處理問題
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 4 之 4 篇):