SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 679|回复: 5
打印 上一主题 下一主题

感谢hopewell,最后一个问题。。。

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2009-8-24 23:48:20 | 只看该作者

感谢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
................(以下雷同)

请求高手帮忙,呵呵,可能到了这里问题已经比较简单了,可是自己还是解决不了 。。。皑皑 。。。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2009-8-25 03:08:20 | 只看该作者

Re: 感谢hopewell,最后一个问题。。。

也就是每个sjid做一次回归。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2009-8-25 11:52:41 | 只看该作者

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]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2009-8-25 19:27:15 | 只看该作者

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]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2009-8-25 21:36:52 | 只看该作者

Re: 感谢hopewell,最后一个问题。。。

谢谢byes指点,我又冒傻气了...
再看到离谱的地方一定告诉我一声昂!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2009-8-27 02:41:10 | 只看该作者

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解决方案,呵呵,不过还蛮有效的
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-5 23:09 , Processed in 0.118075 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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