SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 547|回复: 3
打印 上一主题 下一主题

急: SAS程序动态生成ID列,再做线形回归

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2011-2-6 01:49:02 | 只看该作者

急: SAS程序动态生成ID列,再做线形回归

TXT文本导入的数据格式简化如下:
Y         X1        X2
2        3        5
4        6        2
5        1        3

然后我想用循环控制REGERSSION:
i = 1 时,执行 Y=X1 BY ID
i = 2 时,执行 Y=X2 BY ID

但是导入的DATASET中没有ID这个列。
所以我想在做REGERSSION之前,针对于(Y,X1)这个DATASET生成ID=1的一列

Y         X1         ID
2        3         1
4        6         1
5        1         1
然后把ID 和回归生成的INTERCEPT放在一个新的TABLE1 中。

当在做Y=X2的回归时,DATASET用程序生成ID=2的一列。

Y        X2        ID
2        5        2
4        2        2
5        3        2

然后把ID 和回归生成的INTERCEPT放在一个新的TABLE2中。

没有想出很好的办法,请好心人帮帮我,非常感谢。
多谢 *-^
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2011-2-6 22:25:56 | 只看该作者

Re: 急: SAS程序动态生成ID列,再做线形回归

to happy6886
[code:2aj115hh]
data yourdata;
        do y=1 to 5;
                    x1=ranuni(0);
                        x2=rannor(0);
                        output;
                end;
run;

proc transpose data=yourdata  out=newdata(rename=(col1=x));
        by y;
                var x:;
run;

proc sort data=newdata;
        by _NAME_;
run;

proc reg data=newdata  outest=est  noprint;
        by _NAME_;
                model y = x;
run;quit;
[/code:2aj115hh]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2011-2-7 00:53:01 | 只看该作者

Re: 急: SAS程序动态生成ID列,再做线形回归

谢谢版主,你的代码的确写的很巧妙,非常佩服。
我想在你的代码基础上进行如下修改,不知道如何实现?

加上两个动态生成的列,ID=1, OR ID=2, 因为最后OUTEST的结果保存后,必须得生成如下的数据格式,我才能用这个数据来
进行进一步的回归,这里的ID其实就有些像数据表中的PRIMARY KEY, 和X1 OR X2一一对应的。
the examples of data format:
ID        intercept  (got from y=x1)
1        0.2
1        0.3
1        0.4
ID        intercept  (got from y=x2)
2        0.1
2        0.2
2        0.3

多谢。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2011-2-9 06:02:41 | 只看该作者

Re: 急: SAS程序动态生成ID列,再做线形回归

to happy6886
ID=input(substr(_NAME_, 2), best.);
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-13 08:39 , Processed in 0.081824 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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