[程式] SAS資料篩選

看板Statistics作者 (kkii)時間13年前 (2011/05/19 13:59), 編輯推噓3(304)
留言7則, 3人參與, 最新討論串1/1
[軟體程式類別]: sas [程式問題]: 挑選資料 [軟體熟悉度]: 低(1~3個月) [問題敘述]: 小弟想寫一個追前高資料以及追前低資料的巨集,下面的範例是可以跑的 但是當我把SETTLED<=0改成>=0 if flag < settle_price 改成 if flag> settle price後, flag這個變數下都找不到資料,請問是哪裡出錯。 追高可以成功但是追低就無法成功 [程式範例]: %macro picklow_year(startyear); /*只保留下有過前低的日期資料*/ DATA picklowyear&startyear; SET cutyear&startyear; LAG_SETTLE1=LAG0(SETTLE_PRICE); LAG_SETTLE2=LAG2(LAG_SETTLE1); SETTLED=LAG_SETTLE1-LAG_SETTLE2; IF SETTLED <=0 and settled ne '.' THEN DELETE; retain flag ; if flag < SETTLE_PRICE then flag = SETTLE_PRICE ; PROC SORT ; BY DATE FLAG CP_FLAG DATE ; PROC SORT NODUPKEY ; BY FLAG CP_FLAG; RUN; %mend; %picklow_year(2007) %picklow_year(2008) %picklow_year(2009) ----------------------------------------------------------------------------- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.120.80.19

05/19 15:58, , 1F
巨集的問題我會建議把巨集裡的程式另外複製出來,挑某一
05/19 15:58, 1F

05/19 15:59, , 2F
年(如2007)取代&startyear,看log視窗的錯誤訊息是什麼
05/19 15:59, 2F

05/19 17:10, , 3F
主要的原因是你的flag初始值是null,然後settle_price恆
05/19 17:10, 3F

05/19 17:11, , 4F
正(我猜),所以if flag<settle_price這一個條件永遠不會
05/19 17:11, 4F

05/19 17:12, , 5F
過,所以抓不到資料。btw,感覺語法邏輯怪怪的.........
05/19 17:12, 5F

05/19 17:12, , 6F
(打錯 應該是if flag>settle_price這個條件)
05/19 17:12, 6F

05/19 19:17, , 7F
你使用lag function 就要注意排序問題
05/19 19:17, 7F
文章代碼(AID): #1DrB7L5F (Statistics)