全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2280 12
2013-11-01
悬赏 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;
二维码

扫码加我 拉你入群

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

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

全部回复
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.
复制代码
二维码

扫码加我 拉你入群

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

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

2013-11-1 23:02:03
没太看懂下面的那个矩阵的感觉
二维码

扫码加我 拉你入群

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

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

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





二维码

扫码加我 拉你入群

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

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

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目的就是想通过宏实现最后一张表格的统计结果。

二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群