SAS中文论坛
标题:
感谢hopewell,最后一个问题。。。
[打印本页]
作者:
shiyiming
时间:
2009-8-24 23:48
标题:
感谢hopewell,最后一个问题。。。
再次感谢hopewell!
看了他解答我的两个问题,收益匪浅。呵呵,不过第二个程序实在太复杂了,看不懂了,现在我的一系列问题我自已用了非常笨的办法都解决了,只剩下最后一步,把这个问题解决了,就一切OK了!
最后的问题是这样的(其余都不管):现在数据集里还有三个变量syl(股票收益率)、szzzsyl(上证综指收益率)、sjid(事件id),sjid变量每隔70个相同,现在要生成两个变量a和b,分别对应syl=a*szzzsyl+b回归方程中的a和b,难点在于a和b每隔70个会发生变化,也就是说不同的sjid对应不同的a和b(不过在每隔70个观测里面,sjid、a、b都是相同的)。
数据集的大概样子如下:
syl szzzsyl sjid
0.2 0.2 3
0.3 0.2 3
0.1 0.5 3
...............(sjid=3的观测有70个)
0.1 0.2 3
0.5 0.1 3
0.4 0.3 15
0.3 0.4 15
0.1 0.3 15
...............(sjid=15的观测有70个)
0.1 0.2 15
0.2 0.1 31
0.3 0.5 31
0.5 0.2 31
................(sjid=31的观测有70个)
0.4 0.1 31
0.4 0.2 31
0.5 0.3 40
0.1 0.2 40
................(以下雷同)
请求高手帮忙,呵呵,可能到了这里问题已经比较简单了,可是自己还是解决不了 。。。皑皑 。。。
作者:
shiyiming
时间:
2009-8-25 03:08
标题:
Re: 感谢hopewell,最后一个问题。。。
也就是每个sjid做一次回归。
作者:
shiyiming
时间:
2009-8-25 11:52
标题:
Re: 感谢hopewell,最后一个问题。。。
没时间了,就在原来基础上改了改,不知道数对不
其实一直不太清楚,对这样的大量回归计算,怎么去做方程检验呢,请高人指点一下
[code:vujxrccj]data raw;
input syl szzzsyl sjid;
datalines;
0.2 0.2 3
0.3 0.2 3
0.1 0.5 3
0.1 0.2 3
0.5 0.1 3
0.4 0.3 15
0.3 0.4 15
0.1 0.3 15
0.1 0.2 15
0.2 0.1 31
0.3 0.5 31
0.5 0.2 31
0.4 0.1 31
0.4 0.2 31
0.5 0.3 40
0.1 0.2 40
;
%macro create_syl(in_ds);
options nomprint nosymbolgen;
%macro create_reg(id);
ods _all_ close;
ods output Reg.MODEL1.Fit.syl.ParameterEstimates=_temp_reg;
proc reg data=&in_ds(where=(sjid=&id));
model syl=szzzsyl;
run;
quit;
ods _all_ close;
ods listing;
data _null_;
set _temp_reg;
if _n_=1 then call symput('a',put(estimate,best8.));
if _n_=2 then call symput('b',put(estimate,best8.));
run;
data &in_ds;
set &in_ds;
if sjid=&id then do;
a=&a;
b=&b;
end;
run;
%mend;
proc sql;
create table _temp_sjid_list as
select distinct sjid from &in_ds;
quit;
%let dsid=%sysfunc(open(_temp_sjid_list));
%syscall set(dsid);
%let nobs=%sysfunc(attrn(&dsid,nobs));
%do inb_obs=1 %to &nobs;
%let rc=%sysfunc(fetchobs(&dsid,&inb_obs));
%create_reg(&sjid)
%end;
%let rc=%sysfunc(close(&dsid));
proc datasets library=work nolist nodetails;
delete _temp: /memtype=data;
run;
quit;
%mend;
%create_syl(raw)[/code:vujxrccj]
作者:
shiyiming
时间:
2009-8-25 19:27
标题:
Re: 感谢hopewell,最后一个问题。。。
[code:gp5vzv3u]data raw;
input syl szzzsyl sjid;
datalines;
0.2 0.2 3
0.3 0.2 3
0.1 0.5 3
0.1 0.2 3
0.5 0.1 3
0.4 0.3 15
0.3 0.4 15
0.1 0.3 15
0.1 0.2 15
0.2 0.1 31
0.3 0.5 31
0.5 0.2 31
0.4 0.1 31
0.4 0.2 31
0.5 0.3 40
0.1 0.2 40
;
run;
proc sort data=raw;
by sjid;
run;
proc reg data=raw outest=reg(keep=sjid szzzsyl Intercept rename=(szzzsyl=a Intercept=b)) noprint;
model syl=szzzsyl;
by sjid;
run;
data result;
merge raw reg;
by sjid;
run;[/code:gp5vzv3u]
作者:
shiyiming
时间:
2009-8-25 21:36
标题:
Re: 感谢hopewell,最后一个问题。。。
谢谢byes指点,我又冒傻气了...
再看到离谱的地方一定告诉我一声昂!
作者:
shiyiming
时间:
2009-8-27 02:41
标题:
Re: 感谢hopewell,最后一个问题。。。
恩 ,感谢 byes。
我原来没有用过model y=x; by variable;这种语句,主要是不知道reg里可以跟by语句;
我同样是用了 一个非常笨的办法解决了这个问题 ,我写下来,给大家献丑 :
我用Analyst打开数据集,然后simple regression,选择好因变量和自变量,在对话框中的variable中选择group by “sjid",生成Htm文件,生成后用excel打开,利用index函数读取我想要的a、b和sjid,然后生成SAS数据集,在利用sjid变量merge两个数据集,此时有syl、szzzsyl,a、b,就能估算syl'了,然后用syl减去syl'就得到了我想要的结果。
整个过程不像是SAS解决方案,呵呵,不过还蛮有效的
欢迎光临 SAS中文论坛 (https://mysas.net/forum/)
Powered by Discuz! X3.2