楼主: jzhang04
5503 7

SAS 循环、回归结果导出? [推广有奖]

  • 1关注
  • 0粉丝

高中生

32%

还不是VIP/贵宾

-

威望
0
论坛币
10 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
686 点
帖子
28
精华
0
在线时间
18 小时
注册时间
2007-6-28
最后登录
2019-11-2

楼主
jzhang04 发表于 2010-6-16 11:02:42 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
有下面的数据格式 (有很多的plot,这 只是给出个列子):
plotvisitn_liven_deadyearlive_offyr_interval
12602319845986
13601619906026
14601619956015
15600720026017
22312719833175
23307919883125
24299819933075
252921619982995
32312719833175
33307919883125
34299819933075
352921619982995

关于循环和回归结果导出的问题,已经列在下面的SAS程序中,相应的“*”处。
请大家帮忙啊~
非常感谢!

有下面的SAS程序:

proc import out=trees datafile='C:\Users\data1.xls'
        dbms=excel2000 replace;
        run;

data data2;
        set trees;
        if plot=1; * 选择plot=1的进行数据分析 (我的问题是:如何可以写一个循环,一下对我所有的plot进行下面的数据分析?)
        proc print data=data2;
run;

title 'GENERALIZED NONLINEAR MIXED MODEL, WITH YEAR';
proc nlmixed data=data2;                 
        parms a=0 b=0 s2=0.1;                                                         
        eta = a + b*year;                  
        p_ann_mort = exp(eta)/(1+exp(eta));                        
        p_ann_surv = 1-p_ann_mort;                                                
        p_surv = p_ann_surv**yr_interval;                                 
        p_mort = 1-p_surv;
        mean_mort = live_off*p_mort;
        ll=lgamma(1/alpha + n_dead) - lgamma(1 + n_dead) - lgamma(1/alpha)
                + n_dead*log(alpha*mean_mort)
                - (1/alpha + n_dead)*log(1 + alpha*mean_mort);        * log likelihood function for negative binomial regression ;
        model n_dead ~ general(ll);  * 这是一次运行的分析结果 (我的问题是:怎样可以把所有plot分析的结果放在一起,列出来?。我只需要结果里面的prameter部分的结果)
run;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:回归结果 proc nlmixed mixed model Generalized regression 结果 SAS

回帖推荐

nkwilling 发表于8楼  查看完整内容

data a; input plot visit n_live n_dead year live_off yr_interval ; cards; 1 2 602 3 1984 598 6 1 3 601 6 1990 602 6 1 4 601 6 1995 601 5 1 5 600 7 2002 601 7 2 2 312 7 1983 317 5 2 3 307 9 1988 312 5 2 4 299 8 1993 307 5 2 5 292 16 1998 299 5 3 2 312 7 1983 317 5 3 3 307 9 1988 312 5 3 4 299 8 1993 307 5 3 5 292 16 1998 299 5 ; run; %macro tt; %if %sysfunc(exist(tot ...

本帖被以下文库推荐

沙发
nkwilling 发表于 2010-6-16 11:19:25
第一个问题,你用macro的do循环语句。
第二个问题,先用ods trace查看该过程步的所有输出名称,然后用ods output语句导出你想要的数据集。

藤椅
jzhang04 发表于 2010-6-16 13:03:52
nkwilling 发表于 2010-6-16 11:19
第一个问题,你用macro的do循环语句。
第二个问题,先用ods trace查看该过程步的所有输出名称,然后用ods output语句导出你想要的数据集。
非常感谢!
能帮我写一下程序吗?就在上面的程序上修改就可以。
我平常不用SAS,用R语言,所以对SAS一点都不了解。
再次感谢~

板凳
jzhang04 发表于 2010-6-16 13:07:02
我最后期待的结果应该是这样:
plotParameterEstimateStandard ErrorDFt ValuePr > |t|AlphaLowerUpperGradient
1a-0.008512.7513141600.99750.05-5.40575.3886-229.141
1b-0.002080.0013841416-1.510.13240.05-0.00480.000631-459992
1s2-1.11E-12.1416..0.05..4469.395
1alpha0.9264.1416..0.05..1709.494
2a-0.0003311.7381211010.05-23.139323.138697.18042
2b-0.001820.005901211-0.310.75820.05-0.013450.009813193134.8
2s2-1.11E-12.211..0.05..285.4842
2alpha1.2957.211..0.05..203.1044
3a-0.0004523.960631010.05-48.868348.8674-1.15804
3b-0.002130.0120431-0.180.86060.05-0.026680.02242-2470.37
3s2-1.11E-12.31..0.05..65.61452
3alpha0.9467.31..0.05..39.73354

报纸
jzhang04 发表于 2010-6-16 23:27:48
大家帮忙啊~

地板
nkwilling 发表于 2010-6-17 13:55:37
%macro t;

%do i=1 %to plot_class;

data data2;
        set trees;
        if plot=1;
run;

title 'GENERALIZED NONLINEAR MIXED MODEL, WITH YEAR';

ods output test&i.=another SAS name;
proc nlmixed data=data2;                 
.....
run;

%end i;

%mend t;

%t;

其中的test&i.是由ods trace语句得到,如下:

ods trace;
proc nlmixed;.....;run;
因为我不知道你的数据集,所以无法测试.不过我想,上面已经说的很清楚了

7
jzhang04 发表于 2010-6-18 09:50:44
nkwilling 发表于 2010-6-17 13:55
因为我不知道你的数据集,所以无法测试.不过我想,上面已经说的很清楚了
数据就是我这个帖子1楼的样子。我选取了部分数据,但是应该可以做测试了。

按照你给我的回复,我修改了我的程序。但是还是弄不出来结果。

我的程序如下:
proc import out=trees datafile='C:\Users\zjian\Desktop\Data_R\Rates\PSP_Rates_GNMM\psp_dbh200.allPlots.xls'
        dbms=excel2000 replace;
        run;

%macro t;

%do i=1 %to plot_class;

data trees;
        set trees;
        * stdyear=year-1960; * stdyear is a standardized version of year, ranging from 0 to 49;
        if plot=i;
        *proc print data=trees;
run;

title 'GENERALIZED NONLINEAR MIXED MODEL, WITH YEAR';
ods output test&i.=res;
proc nlmixed data=trees;                 
        parms a=0 b=0;                                                         
        eta = a + b*year;                                 
        p_ann_mort = exp(eta)/(1+exp(eta));                        
        p_ann_surv = 1-p_ann_mort;                                                
        p_surv = p_ann_surv**yr_interval;                                 
        p_mort = 1-p_surv;
        mean_mort = live_off*p_mort;
        ll=lgamma(1/alpha + n_dead) - lgamma(1 + n_dead) - lgamma(1/alpha)
                + n_dead*log(alpha*mean_mort)
                - (1/alpha + n_dead)*log(1 + alpha*mean_mort);        * log likelihood function for negative binomial regression ;
        model n_dead ~ general(ll);
        predict live_off*p_mort out=predobs1;
run;

%end i;
%mend t;
%t;

请大家再帮我看看啊~
多谢!

8
nkwilling 发表于 2010-6-18 22:02:32
data a;
input
plot visit n_live n_dead year live_off yr_interval ;
cards;
1 2 602 3 1984 598 6
1 3 601 6 1990 602 6
1 4 601 6 1995 601 5
1 5 600 7 2002 601 7
2 2 312 7 1983 317 5
2 3 307 9 1988 312 5
2 4 299 8 1993 307 5
2 5 292 16 1998 299 5
3 2 312 7 1983 317 5
3 3 307 9 1988 312 5
3 4 299 8 1993 307 5
3 5 292 16 1998 299 5
;
run;
%macro tt;
%if %sysfunc(exist(total_out)) ne 0 %then %do;
proc datasets lib=work nolist;
delete total_out;
run;
%end;
%do i=1 %to 3;
data data2;
set a;
if plot=&i.;
run;
ods output  ParameterEstimates=PE&i.;
proc nlmixed data=data2;                 
        parms a=0 b=0 s2=0.1;                                                         
        eta = a + b*year;                  
        p_ann_mort = exp(eta)/(1+exp(eta));                        
        p_ann_surv = 1-p_ann_mort;                                                
        p_surv = p_ann_surv**yr_interval;                                 
        p_mort = 1-p_surv;
        mean_mort = live_off*p_mort;
        ll=lgamma(1/alpha + n_dead) - lgamma(1 + n_dead) - lgamma(1/alpha)
                + n_dead*log(alpha*mean_mort)
                - (1/alpha + n_dead)*log(1 + alpha*mean_mort);        
model n_dead ~general(ll);  
run;
proc append base=total_out data=PE&i.;run;
%end i;
%mend tt;
%tt;
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-3 05:09