[程式] SAS如何自動取五分鐘為一筆資料

看板Statistics作者 (阿炫)時間14年前 (2012/02/08 00:29), 編輯推噓2(209)
留言11則, 4人參與, 最新討論串1/2 (看更多)
------------------------------------------------------------------------ [軟體程式類別]: SAS Eview [程式問題]: 資料處理 [軟體熟悉度]: 新手 [問題敘述]: 資料型式如下: 月/日/年 時:分:秒 買價 01/04/10 0:04:58 . 01/04/10 0:04:59 1.4316 01/04/10 0:05:05 . 01/04/10 0:05:06 . 01/04/10 0:09:56 . 01/04/10 0:11:04 1.4315 01/04/12 0:10:03 . 以五分鐘為基準,取最靠近每五分鐘的資料,故整理完的資料為: 01/04/10 0:04:59 1.4316 01/04/10 0:09:56 . 01/04/12 0:10:03 . 因為資料需要每一筆每一筆去比較,目前構想為: if 第i筆資料的分鐘數^=第i-1筆的分鐘數 then; if 第i筆資料的分鐘數為5或0結尾 then; if 第i筆的秒數<60-第i筆的秒數 then; 取得這筆資料 end; end; end; [程式範例]: t1內的資料形式為: 01/04/10 00004 /*0:00:04 手動將帽號替除 不然好像讀不進IML */ 01/04/10 00005 01/04/10 00011 01/04/10 00018 以下為程式: proc iml; use t1 var _all_; read all into mat; rs=nrow(mat); cs=ncol(mat); k=0; mat1=repeat('.',rs,cs); do i=2 to rs; if (int(mat[i,2]/100))^=(int(mat[i-1,2]/100)) then if (int(mat[i,2]/100)-int(mat[i,2]/1000)*10)=0 or (int(mat[i,2]/100)-int(mat[i,2]/1000)*10)=5 then/*這邊好像不能用or是否有 其他替代方案?*/ if (mat[i,2]-int(mat[i,2]/100)*100)<60-(mat[i-1,2]-int(mat[i-1,2]/100)*100) then k=k+1; mat1[k,1]=mat[i,1]; mat1[k,2]=mat[i,2]; mat1[k,3]=mat[i,3]; mat1[k,4]=mat[i,4]; mat1[k,5]=mat[i,5]; mat1[k,6]=mat[i,6]; mat1[k,6]=mat[i,7]; else mat1[k,1]=mat[i-1,1]; mat1[k,2]=mat[i-1,2]; mat1[k,3]=mat[i-1,3]; mat1[k,4]=mat[i-1,4]; mat1[k,5]=mat[i-1,5]; mat1[k,6]=mat[i-1,6]; mat1[k,6]=mat[i-1,7]; ;;;; end; print mat mat1 k rs cs; quit; run; ----------------------------------------------------------------------------- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.34.44.193

02/08 05:51, , 1F
剛剛想到...可使用IML嗎?正在努力研究中,希望會的大大
02/08 05:51, 1F

02/08 05:52, , 2F
指點一下程式要怎麼寫嚕~
02/08 05:52, 2F

02/08 07:35, , 3F
如果是時間秒的格式 則將秒數-1後 除以300
02/08 07:35, 3F

02/08 07:37, , 4F
可得整數部位和餘數部位
02/08 07:37, 4F

02/08 07:37, , 5F
整數部位是妳的分組 餘數部位最大於數的值是你要的資料
02/08 07:37, 5F

02/08 07:38, , 6F
日內資料不難處理
02/08 07:38, 6F

02/08 10:24, , 7F
tew大,這樣只能找到每分鐘內最後一筆的資料吧?
02/08 10:24, 7F

02/08 10:25, , 8F
剛剛嘗試寫了IML,不過有error,一直找不出原因,更新於本文
02/08 10:25, 8F
※ 編輯: kurtasd 來自: 114.34.44.193 (02/08 10:35)

02/08 10:34, , 9F
時間的格式是哪一種?
02/08 10:34, 9F

02/08 10:36, , 10F
時間隔式為time8.
02/08 10:36, 10F

02/08 21:59, , 11F
要畫K線圖?
02/08 21:59, 11F
文章代碼(AID): #1FCL5XZo (Statistics)
文章代碼(AID): #1FCL5XZo (Statistics)