楼主: snhymr
3206 5

[原创博文] 请教SAS牛人如何编写循环regression,多谢! [推广有奖]

  • 0关注
  • 0粉丝

初中生

28%

还不是VIP/贵宾

-

威望
0
论坛币
1842 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
250 点
帖子
5
精华
0
在线时间
19 小时
注册时间
2010-9-10
最后登录
2018-4-12

楼主
snhymr 发表于 2010-9-29 10:37:51 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我是菜鸟,刚学SAS,请教大牛如何编写SAS的循环regression

要处理的数据如下:

year  ln(gdp)
1961 9.602472862
1962 9.649418792
1963 9.681385157
1964 9.727264034
1965 9.782604147
1966 9.829572969
1967 9.835729591
1968 9.877953776
1969 9.903003053
1970 9.890859302
1971 9.916887822
1972 9.964787841
1973 10.01340843
1974 9.994554547
1975 9.978438859
1976 10.02803398
1977 10.06749239
1978 10.11285338
1979 10.13108044
1980 10.10795417
1981 10.12455567
1982 10.0933038
1983 10.13424329
1984 10.20550467
1985 10.23570411
1986 10.25847946
1987 10.28186532
1988 10.3116309
1989 10.33722767
1990 10.34154494
1991 10.32257995
1992 10.34526211
1993 10.36397948
1994 10.39812835
1995 10.41312741
1996 10.44251655
1997 10.4805391
1998 10.51461513
1999 10.54960374
2000 10.57747762
2001 10.56965618
2002 10.57275725

我要做的任务是
从1961年开始,每七年的ln(gdp)对于年份(year)做一次线性回归,提取一个coefficient, [model ln(gdp)=year] 比如:1961-1967做一个线性回归,提取的coefficient对应于1961年;1962-1968做一个线性回归,提取的系数对应于1962年;1963-1969做一个线性回归,提取的系数对应于1963年,以此类推,直到
1996-2002年,提取的系数对应于1996年。

请教SAS大牛,帮我编这个重复多次循环回归的SAS code,万分感谢!
二维码

扫码加我 拉你入群

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

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

关键词:regression regressio regress REG GRE 如何

回帖推荐

hopewell 发表于2楼  查看完整内容

"提取一个coefficient"是啥意思? 为了一个系数写个macro太不合算了,就是个原型,log的warning你自己看着办吧

jingju11 发表于3楼  查看完整内容

1# snhymr 和hopewell一样我也意识到by-processing的好处。只是我的思维偏于直线,纠结于如何得出一个by顺序的数据。这也算是一个经验和教训吧。

本帖被以下文库推荐

沙发
hopewell 发表于 2010-9-29 13:56:37
"提取一个coefficient"是啥意思?
为了一个系数写个macro太不合算了,就是个原型,log的warning你自己看着办吧
  1. data raw;
  2.     input year ln;
  3. datalines;
  4. 1961 9.602472862
  5. 1962 9.649418792
  6. 1963 9.681385157
  7. 1964 9.727264034
  8. 1965 9.782604147
  9. 1966 9.829572969
  10. 1967 9.835729591
  11. 1968 9.877953776
  12. 1969 9.903003053
  13. 1970 9.890859302
  14. 1971 9.916887822
  15. 1972 9.964787841
  16. 1973 10.01340843
  17. 1974 9.994554547
  18. 1975 9.978438859
  19. 1976 10.02803398
  20. 1977 10.06749239
  21. 1978 10.11285338
  22. 1979 10.13108044
  23. 1980 10.10795417
  24. 1981 10.12455567
  25. 1982 10.0933038
  26. 1983 10.13424329
  27. 1984 10.20550467
  28. 1985 10.23570411
  29. 1986 10.25847946
  30. 1987 10.28186532
  31. 1988 10.3116309
  32. 1989 10.33722767
  33. 1990 10.34154494
  34. 1991 10.32257995
  35. 1992 10.34526211
  36. 1993 10.36397948
  37. 1994 10.39812835
  38. 1995 10.41312741
  39. 1996 10.44251655
  40. 1997 10.4805391
  41. 1998 10.51461513
  42. 1999 10.54960374
  43. 2000 10.57747762
  44. 2001 10.56965618
  45. 2002 10.57275725
  46. ;
  47. data temp(index=(group_year=(group year)));
  48.     set raw nobs=n;
  49.     do i=max(0,_n_-n+6) to min(6,_n_-1);
  50.         group=year-i;
  51.         output;
  52.     end;
  53.     drop i;
  54. run;
  55. proc reg data=temp outest=out noprint;
  56.     model ln=year;
  57.     by group;
  58. run;
复制代码
已有 2 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
crackman + 20 + 1 + 1
jingju11 + 1 + 1 + 1 很好很好

总评分: 论坛币 + 20  学术水平 + 2  热心指数 + 2  信用等级 + 1   查看全部评分

藤椅
jingju11 发表于 2010-9-29 21:57:41
1# snhymr
  1. data have;
  2. array _t{1961:2002, 2} _temporary_;
  3. set raw end =eof;
  4. _t[year, 1] =ln; _t[year, 2] =year;
  5. if eof then do group =1961 to 2002 -6;
  6.     do _n_ =group to group +6;
  7.      ln =_t[_n_, 1]; year =_t[_n_, 2];
  8.      output;
  9.    end;
  10.     end;
  11. run;
复制代码
和hopewell一样我也意识到by-processing的好处。只是我的思维偏于直线,纠结于如何得出一个by顺序的数据。这也算是一个经验和教训吧。
已有 2 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
crackman + 20 + 1 + 1
hopewell + 1 + 1 + 1 我很赞同

总评分: 论坛币 + 20  学术水平 + 2  热心指数 + 2  信用等级 + 1   查看全部评分

板凳
ryuuzt 发表于 2010-9-30 16:20:34
学习了。楼上的两位都很了不起。

报纸
fengzifz 发表于 2010-10-1 11:31:05
厉害。学到东西了。

地板
novice505 发表于 2010-10-4 22:34:26
*假设原始数据集名为orig,利用循环语句和set语句中的point可选项也可实现。;
data cy;
do g=1961 to 1996;
  do i=(g-1960) to g-1960+6;  
   set orig point=i;
   output;
  end;
end;
stop;
proc reg data=cy outest=out;
model ln=year;
by g;
quit;
proc print data=out;
run;

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

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