[程式] 請教一個SAS迴圈的問題
------------------------------------------------------------------------
[軟體程式類別]:
SAS
[程式問題]:
do until該怎麼放
[軟體熟悉度]:
新手(不到1個月)
[問題敘述]:
由於處理論文資料的關係
我老闆叫我自己去摸通SAS
然後把一些東西弄好給他看
不過我自己本身程式的能力很低
以下的程式碼是我老闆寫好的部分
他丟給我原則上拿它來修改即可
我要做的事情是把程式裡面 intck ('month', private.date1,a.date )= i
這部分從-60做到+60
老闆好像說可以用macro寫
不過我在網路上找教學還是不太懂MACRO是在幹嘛
我自己想到是用DO UNTIL寫
不過不太知道該怎麼放進這些敘述
如果我是想每個intck=i
都生成一個ZEROTRADE(i)
最後再用MERGE合併起來
有沒有比較快的做法呢?
先謝謝耐心看到這邊的各位
謝謝
[程式範例]:
主要問題部分:
proc sql;
create table ZEROTRADE as select
a.*, private.*
from a (rename=(permno= permno1)), private
where a.permno1=private.permno and intck ('month', private.date1,a.date )=0;
quit;
run;
-----------------------------------------------------------------------------
全部程式:
proc sql;
create table ZEROTRADE as select
a.*, private.*
from a (rename=(permno= permno1)), private
where a.permno1=private.permno and intck ('month', private.date1,a.date )=0;
quit;
run;
data ZEROTRADE;
set ZEROTRADE;
if VOL=. then delete;
if turnover=. then delete;
PROC SORT DATA= ZEROTRADE; BY ID PERMNO announce DATE;
run;
DATA NOTD ;
SET ZEROTRADE;
proc means data= NOTD noprint;
by ID;
var DATE;
output out=NOTDOUT sum=sumDATE;
run;
DATA NOTDOUT (KEEP=ID NOTD);
SET NOTDOUT (rename=(_FREQ_=NOTD));
PROC SORT DATA= NOTDOUT; BY ID ;
run;
DATA TURNOVER ;
SET ZEROTRADE;
proc means data=TURNOVER noprint;
by ID;
var turnover;
output out=TURNOVEROUT sum=sumturnover;
run;
DATA TURNOVEROUT (KEEP=ID ONE_MONTH_TURNOVER);
SET TURNOVEROUT (rename=(sumturnover=ONE_MONTH_TURNOVER));
PROC SORT DATA= TURNOVEROUT; BY ID ;
run;
DATA ZERO ;
SET ZEROTRADE;
IF VOL^=0 THEN DELETE;
PROC SORT DATA= ZERO; BY ID ;
run;
DATA ZERO ;
SET ZERO;
proc means data= ZERO noprint;
by ID;
var DATE;
output out=ZEROOUT sum=sumDATE;
run;
DATA ZEROOUT (KEEP=ID NOZERO);
SET ZEROOUT (rename=(_FREQ_=NOZERO));
PROC SORT DATA= ZEROOUT; BY ID ;
run;
DATA ZEROOUT1 ;
SET ZEROTRADE (KEEP=ID);
PROC SORT DATA= ZEROOUT1 noduplicate; BY ID ;
run;
DATA ZEROOUT2;
MERGE ZEROOUT1 (in=a) ZEROOUT (in=b) ; BY id ;
if a^=1 then delete;
PROC SORT DATA= ZEROOUT2; BY ID ;
run;
DATA ZEROOUT3;
set ZEROOUT2;
if NOZERO=. then NOZERO=0;
PROC SORT DATA= ZEROOUT3 noduplicate; BY ID ;
run;
data private (keep=id permno announce DATE1);
set private;
PROC SORT DATA=private; BY ID PERMNO DATE1;
run;
DATA lm;
MERGE private (in=a) NOTDOUT (in=b) ; BY id ;
if a^=1 then delete;
PROC SORT DATA= lm; BY ID ;
run;
DATA lm1;
MERGE lm (in=a) TURNOVEROUT (in=b) ; BY id ;
if a^=1 then delete;
PROC SORT DATA= lm1; BY ID ;
run;
DATA lm2;
MERGE lm1 (in=a) ZEROOUT3 (in=b) ; BY id ;
if a^=1 then delete;
PROC SORT DATA= lm2; BY ID ;
run;
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.42.33.108