Re: [程式] SAS如何配對每五分鐘資料

看板Statistics作者 (謠指部總司令)時間9年前 (2015/04/05 03:37), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串3/3 (看更多)
這個資料整理的難度是要縱向去抓最靠近的五分鐘的那個值然後配對上來 因此程式寫作的思路是 step1. 抓出每個時間點超過五分鐘後的時間點當candidate step2. 從這些candidate中抓出第一筆時間點 step3. 把抓出的第一筆時間點相對應的價格也抓出來 step4. 配對抓出來的價格和原本的價格 因此我先把範例延伸成十個時間點,這樣比較好寫範例: data temp; input time hhmmss. price; cards; 090110 15 090220 16 090530 17 090630 18 090720 19 090840 20 090950 21 091010 22 091120 23 091230 24 ; 用data step無法直接處理,所以我用proc iml: proc iml; /*把資料讀進一個x的矩陣內*/ use temp; read all into x; /*建立一個10X10的空矩陣*/ y = J(10, 10, .); /*算出每一個時間點跟其他時間點的秒數差距,並用橫的方式排列*/ /*算好後把所有小於300秒的數值都設定為missing*/ do i = 1 to 10; do j = 1 to 10; y[j, i] = x[i,1] - x[j,1]; if y[j, i] <= 300 then y[j, i] = .; end; end; /*算每一個時間點有多少個missing,而missing+1的結果就是最靠近 五分鐘後的那個時間點位置。把那個位置存在idx矩陣內*/ m = missing(y); idx = m[,+]+1; /*整理idx矩陣,讓沒有五分鐘後時間點的位置都變成missing data*/ do i = 1 to 10; if idx[i] > 10 then idx[i] = .; end; /*開一個都是0的10X10矩陣,然後讓第i列的第idx[i]行變成1*/ /*因此這個矩陣就可以用來去抓相對應的price值*/ z = J(10,10,0); do i = 1 to 10; z[idx[i],i] = 1; end; /*把五分鐘後最靠近的那個price值抓出來存在一個price2的向量裡面 (注意他是橫的)*/ price2 = t(x[,2])*z; /*把price2轉成直的後跟原本的存放資料的x矩陣合併*/ match = x||t(price2); print match; /*把配對好的資料輸出成SAS檔....請自己寫*/ quit; 結果呈現: match 32470 15 18 32540 16 20 32730 17 23 32790 18 24 32840 19 24 32920 20 0 32990 21 0 33010 22 0 33080 23 0 33150 24 0 注意,沒有配對值的數據都是0,如有必要請自行轉換成missing ※ 引述《TheDuke (Duke)》之銘言: : 入門程度 : 低(1~3個月) : [問題敘述]: : 目前在處理日內的資料,需要把每個時點的資料配對上最靠近的5分鐘後的資料 : 像是 : 時間 價格 五分後價格 : 090110 15 17 : 090220 16 19 : 090530 17 19 : 090630 18 : 090720 19 : [程式範例]: : 目前是參照板上之前的文章 將時間轉成秒數除以300後 用INT 跟MOD 還有first.去篩選資料 : 但是是完全無法配對 : data aa; set aa; SEC_COUNT = (hr-9)*3600+min*60+sec; : INT_5 = int(SEC_COUNT/300) ; : mod_5 = MOD(SEC_COUNT,300) ; run; : data aa;set aa; if first.INT_5;run; : 跑出來的資料雖然是每五分鐘的資料,但我需要的是每筆資料每個時間點都要有對應的 : 五分鐘後的資料,請問各位高手我應該怎麼做? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 139.52.242.104 ※ 文章網址: https://www.ptt.cc/bbs/Statistics/M.1428176250.A.C56.html

04/05 11:29, , 1F
我明白了~謝謝~
04/05 11:29, 1F
文章代碼(AID): #1L83rwnM (Statistics)
文章代碼(AID): #1L83rwnM (Statistics)