SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 836|回复: 2
打印 上一主题 下一主题

有请各位宏高手赐教

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2008-4-1 14:09:33 | 只看该作者

有请各位宏高手赐教

具体情况
1、有3个数据集:tradedata,index,evpara。

(1)交易数据集tradedata,里面有zqdm、date、ret(收益率),
zqdm date ret
600000 20040104 1.2
600000 20040105 1.5
.....
600001 20040104 1.1
600001 20040105 1.3
...

(2)指数数据集index,里面有date,indexret(指数收益率)
date indexret
20040104 0.9
20040105 1.1
...

(3)事件数据集evpara,里面有eventzqdm、eventdate
eventzqdm eventdate
600000 20060430
600001 20060825
...


2、要从evpara中循环读取eventzqdm,eventdate做事件研究,
对于evpara.zqdm=tradedata.zqdm and evpara.eventdate=tradedata.date的则进行一次运算CARs:


我自己编了个宏程序,如下,但不行,不知问题在哪里?

%macro build;/*isolate subset of data for a given company, calc Beta on releveant range;
calc CAR on event window; append event period data to Results dataset*/


data t3 t4;
set tradedata;
if zqdm=&eventzqdm and date>&eventdate then output t4;
else if zqdm=&eventzqdm then output t3;
run;

proc sort data=t3;
by descending date;
run;

data betafirm;
set t3;
if 21=<_n_<=60;
run;

data i3 i4;
set index;
if date>&eventdate then output i4;
else output i3;
run;

proc sort data=i3;
by descending date;
run;

data beta_mkt;
set i3;
if 21<=_n_<=60;
run;

data betaboth;
merge betafirm beta_mkt;
run;

proc sort data=betaboth;
by date;
run;

proc reg noprint data=betaboth outest=Coefout;
model ret=indexret;
quit;

data _null_;
set coefout;
call symput('nextalpha',intercept);
call symput('nextbeta',indexret);
run;

data t1 t2;
set tradedata;
if zqdm=&eventzqdm and date>&eventdate then output t2;
else if zqdm=&eventzqdm then output t1;
run;

proc sort data=t1;
by descending date;
run;

data t1;
set t1;
if _n_<=10;
run;
data t2;
set t2;
if _n_<=20;
run;
data eventfirm;
set t1 t2;
run;
proc sort data=eventfirm;
by date;
run;

data i1 i2;
set index;
if date>&eventdate then output i2;
else output i1;
run;

proc sort data=i1;
by descending date;
run;

data i1;
set i1;
if _n_<=10;
run;
data i2;
set i2;
if _n_<=20;
run;
data event_mkt;
set i1 i2;
run;

proc sort data=event_mkt;
by date;
run;

data Car_calc;
merge eventfirm event_mkt;
by date;
if _N_=1 then Car=ret-(&nextalpha + &nextbeta*indexret);
else car =ret-(&nextalpha + &nextbeta*indexret)+holdcar;
holdcar=car;
retain holdcar;
alpha=&nextalpha;
beta=&nextbeta;
run;

proc append base= Cars data=Car_calc(drop=holdcar);

%mend build;

%let dsid=%sysfunc(open(evpara));
%let nobs=%sysfunc(attrn(&dsid,nobs));
%let dsid=%sysfunc(close(&dsid));


data tt;
do n=1 to &nobs;
set evpara point=n;
call symput ('eventzqdm',zqdm);
call symput('eventdate',ltdate);
%build;
end;
stop;
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2008-4-4 01:31:12 | 只看该作者

Re: 高手怎么都不见了??--如何生成宏程序

Come on man! You should alway ask for idea here instead of asking others to do your work for fee. It takes a day to read your program, too long  <!-- s:-) --><img src="{SMILIES_PATH}/icon_smile.gif" alt=":-)" title="Smile" /><!-- s:-) -->.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2008-4-8 13:42:47 | 只看该作者

Re: 有请各位宏高手赐教

初步弄了个宏程序(见上面),不知问题在哪里?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-4 18:09 , Processed in 0.074134 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表