楼主: yangz98
1894 12

[有偿编程] 相邻年间转移次数的统计 [推广有奖]

  • 12关注
  • 3粉丝

讲师

48%

还不是VIP/贵宾

-

威望
0
论坛币
331 个
通用积分
1.1202
学术水平
29 点
热心指数
32 点
信用等级
27 点
经验
306 点
帖子
510
精华
0
在线时间
519 小时
注册时间
2012-3-9
最后登录
2023-4-5

50论坛币
data quextion;
input year site;
cards;
1980 5
1981 1
1982 2
1983 2
1984 1
1985 2
1986 1
1987 3
1988 1
1989 3
1990 2
1991 1
1992 3
1993 3
1994 4
1995 4
1996 5
1997 5
1998 5
1999 4
2000 4
2001 1
;
run;
/*怎么通过SAS宏程序实现,转换频率:
譬如:1980到1981,是5-1,计1次
             1981到1982,是1-2,计1次
             1982到1983,是2-2,计1次
             1984到1985,是1-2,及2次
             ......
依次从1980到2001(只统计相邻两年),统计1,2,3,4,5之间转换的频率,*/
上述数据的统计结果:
    1  2  3  4  5
1  0  2  3  0  0
2  3  1  0  0  0
3  1  1  1  1  0
4  1  0  0  2  1
5  1  0  0  1  2;*/

最佳答案

pobel 查看完整内容

data test; set quextion(keep=site); set quextion(keep=site rename=(site=nextsite) firstobs=2); run; proc sql; create table test1 as select distinct site,nextsite,count(*) as num from test group by site,nextsite; quit; proc transpose data=test1 out=test2(drop=_name_) prefix=_; by site; var num; id nextsite; run;
关键词:SAS宏程序 cards Input Site year 统计 程序

回帖推荐

pobel 发表于12楼  查看完整内容

data test; set quextion(keep=site); set quextion(keep=site rename=(site=nextsite) firstobs=2); run; proc sql; create table test1 as select distinct site,nextsite,count(*) as num from test group by site,nextsite; quit; proc transpose data=test1 out=test2(drop=_name_) prefix=_; by site; var num; id nextsite; run;

邓贵大 发表于13楼  查看完整内容

Dude, now I kind regret that I had wanted your easy bucks in the first place. Isn't God's love enough for me? Why would I want these fake Lun Tan Bi? There's something wrong in my soul. I got to quit for a few months.Final word, Dywane, you're doing a heck great of job on the basketball court. I wish you success in SAS too.

邓贵大 发表于2楼  查看完整内容

Dwyane, I don't know much about Macro.

邓贵大 发表于6楼  查看完整内容

Sorry, I didn't test my code. Change 'if eof' to 'if _n_=12' or use a second data step. Didn't realize 'end=' option not applicable to datalines.
沙发
pobel 在职认证  发表于 2013-11-1 17:34:31 |只看作者 |坛友微信交流群
data test;
   set quextion(keep=site);
   set quextion(keep=site rename=(site=nextsite) firstobs=2);
run;

proc sql;
create table test1 as
  select distinct site,nextsite,count(*) as num
    from test
        group by site,nextsite;
quit;

proc transpose data=test1 out=test2(drop=_name_) prefix=_;
   by site;
   var num;
   id nextsite;
run;
和谐拯救危机

使用道具

藤椅
邓贵大 发表于 2013-11-1 20:42:22 |只看作者 |坛友微信交流群
Dwyane, I don't know much about Macro.
  1. data quextion;
  2. infile datalines end=eof;
  3. input year site;
  4. array x[5,5] _temporary_;
  5. array a[5];
  6. site_1=lag(site);
  7. if _n_=1 then call pokelong(repeat(put(0,rb8.), 25), addrlong(x[1,1]), 25*8);
  8. else x[site_1, site] = x[site_1, site]+1;
  9. if eof then do i=1 to 5;
  10. do j=1 to 5;
  11. a[j] = x[i,j];
  12. end;
  13. output;
  14. end;
  15. keep a1-a5;
  16. cards;
  17. 1980 5
  18. 1981 1
  19. 1982 2
  20. 1983 2
  21. 1984 1
  22. 1985 2
  23. 1986 1
  24. 1987 3
  25. 1988 1
  26. 1989 3
  27. 1990 2
  28. 1991 1
  29. 1992 3
  30. 1993 3
  31. 1994 4
  32. 1995 4
  33. 1996 5
  34. 1997 5
  35. 1998 5
  36. 1999 4
  37. 2000 4
  38. 2001 1
  39. ;
  40. run;
复制代码
已有 1 人评分学术水平 热心指数 收起 理由
yangz98 + 1 + 1 补偿

总评分: 学术水平 + 1  热心指数 + 1   查看全部评分

Be still, my soul: the hour is hastening on
When we shall be forever with the Lord.
When disappointment, grief and fear are gone,
Sorrow forgot, love's purest joys restored.

使用道具

板凳
龙潭丰乐 学生认证  发表于 2013-11-1 23:02:03 |只看作者 |坛友微信交流群
没太看懂下面的那个矩阵的感觉

使用道具

报纸
yangz98 发表于 2013-11-2 11:09:28 |只看作者 |坛友微信交流群
邓贵大 发表于 2013-11-1 20:42
Dwyane, I don't know much about Macro.
saslog.txt (860 Bytes) 邓大,跑了一遍,貌似不太对,把log内容给贴上来了,你在帮忙看看。。。谢谢哈
NOTE: PROCEDURE PRINTTO used (Total process time):
      real time           0.01 seconds
      cpu time            0.00 seconds


208  data quextion;
209  infile datalines end=eof;
WARNING: The value of the INFILE END= option cannot be set for CARDS or DATALINES input.
210  input year site;
211  array x[5,5] _temporary_;
212  array a[5];
213  site_1=lag(site);
214  if _n_=1 then call pokelong(repeat(put(0,rb8.), 25), addrlong(x[1,1]), 25*8);
215  else x[site_1, site] = x[site_1, site]+1;
216  if eof then do i=1 to 5;
217  do j=1 to 5;
218   a[j] = x[i,j];
219  end;
220  output;
221  end;
222  keep a1-a5;
223  cards;

NOTE: The data set WORK.QUEXTION has 0 observations and 5 variables.
NOTE: DATA statement used (Total process time):
      real time           0.01 seconds
      cpu time            0.01 seconds





使用道具

地板
yangz98 发表于 2013-11-2 11:16:59 |只看作者 |坛友微信交流群
龙潭丰乐 发表于 2013-11-1 23:02
没太看懂下面的那个矩阵的感觉
应该是我木有说清楚。。。在解释一下哈
其实,就是一个转移次数的频率计算,相邻两年间的site从一个值到另一个值记一次,譬如:
数据集a,如下:
year site
2000 1
2001 3
2002 2
2003 2
2004 3
那么该数据集的理论转移类型有9种,期频数分别记为:
1-1
1-2 2-1
1-3 3-1
2-2
2-3 3-2
3-3
然后,一次统计上述六种情况的频数,在列成表格,如下:
      1       2       3  
1   1-1   1-2    1-3
2   2-1   2-2    2-3
3   3-1   3-2    3-3目的就是想通过宏实现最后一张表格的统计结果。

使用道具

7
邓贵大 发表于 2013-11-2 12:25:11 |只看作者 |坛友微信交流群
Sorry, I didn't test my code.
Change 'if eof' to 'if _n_=12' or use a second data step. Didn't realize 'end=' option not applicable to datalines.
Be still, my soul: the hour is hastening on
When we shall be forever with the Lord.
When disappointment, grief and fear are gone,
Sorrow forgot, love's purest joys restored.

使用道具

8
yangz98 发表于 2013-11-2 13:31:33 |只看作者 |坛友微信交流群
邓贵大 发表于 2013-11-2 12:25
Sorry, I didn't test my code.
Change 'if eof' to 'if _n_=12' or use a second data step. Didn't real ...
谢谢哈,由于木有学过线性代数,对矩阵不是很了解。。。

使用道具

9
龙潭丰乐 学生认证  发表于 2013-11-2 15:15:48 |只看作者 |坛友微信交流群
这样可以吗
  1. data quextion;
  2. input year site;
  3. x=lag(site);
  4. cards;
  5. 1980 5
  6. 1981 1
  7. 1982 2
  8. 1983 2
  9. 1984 1
  10. 1985 2
  11. 1986 1
  12. 1987 3
  13. 1988 1
  14. 1989 3
  15. 1990 2
  16. 1991 1
  17. 1992 3
  18. 1993 3
  19. 1994 4
  20. 1995 4
  21. 1996 5
  22. 1997 5
  23. 1998 5
  24. 1999 4
  25. 2000 4
  26. 2001 1
  27. ;
  28. run;
  29. proc freq data=quextion ;
  30. table site*x/nocol norow nopercent ;
  31. run;
复制代码

使用道具

10
yangz98 发表于 2013-11-2 22:54:45 |只看作者 |坛友微信交流群
龙潭丰乐 发表于 2013-11-2 15:15
这样可以吗
跑了一遍貌似答案不太对。。。
我也一木有想明白,lag(site)*site是什么意思?

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-28 08:02