作者c21221203 (kkii)
看板Statistics
標題[程式] SAS資料篩選
時間Thu May 19 13:59:47 2011
[軟體程式類別]:
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
1F:推 MmmRrrrX:巨集的問題我會建議把巨集裡的程式另外複製出來,挑某一 05/19 15:58
2F:→ MmmRrrrX:年(如2007)取代&startyear,看log視窗的錯誤訊息是什麼 05/19 15:59
3F:推 west1996:主要的原因是你的flag初始值是null,然後settle_price恆 05/19 17:10
4F:→ west1996:正(我猜),所以if flag<settle_price這一個條件永遠不會 05/19 17:11
5F:→ west1996:過,所以抓不到資料。btw,感覺語法邏輯怪怪的......... 05/19 17:12
6F:→ west1996:(打錯 應該是if flag>settle_price這個條件) 05/19 17:12
7F:推 tew:你使用lag function 就要注意排序問題 05/19 19:17