SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

12
返回列表 发新帖
楼主: shiyiming
打印 上一主题 下一主题

求助:一个折磨了我很久的问题

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
11#
 楼主| 发表于 2009-7-10 16:02:27 | 只看该作者

Re: 求助:一个折磨了我很久的问题

the codes of Xu and Hopewell dont seem to solve the problem, but they are indeed quite subtle!!!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
12#
 楼主| 发表于 2009-7-10 16:09:46 | 只看该作者

Re: 求助:一个折磨了我很久的问题

sorry for my last reply. codes of Xu and Hopewell work very well. i am sorry <!-- s:) --><img src="{SMILIES_PATH}/icon_smile.gif" alt=":)" title="Smile" /><!-- s:) -->
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
13#
 楼主| 发表于 2009-7-10 16:18:29 | 只看该作者

Re: 求助:一个折磨了我很久的问题

总算貌似看懂徐福贵的程序了,能写成这样真是太神奇了 <!-- s:shock: --><img src="{SMILIES_PATH}/icon_eek.gif" alt=":shock:" title="Shocked" /><!-- s:shock: -->
如果我理解的不对,望指点,谢谢.
[code:2q25c896]data final_data2(drop=index pp&#58;);

        /* before break-event */
   array pp&#91;0&#58;%eval(&amp;lag_n-1)&#93; pp0-pp9;         /* 声明数组 */
   index = 0;  /* 在每个do组开始前将数组下标变量置为0 */

   /* nested do loop */
   /* 对数据集观测的读入输出均在do-loop中,implied Data step loop仅起到赋初值的作用 */
   /* 在每次do-loop的一次循环中仅将当前记录的p值赋予数组中的相应下标的元素,充分利用变量值在PDV中的retain特性 */
   /* 示意&#58;
obs p |pp0 pp1 pp2 pp3 pp4 pp5 pp6 pp7 pp8 pp9
-----------------------------------------------
0   8 |(8)  &#46;   &#46;   &#46;   &#46;   &#46;   &#46;   &#46;   &#46;   &#46;
1   4 | 8  (4)  &#46;   &#46;   &#46;   &#46;   &#46;   &#46;   &#46;   &#46;
2   2 | 8   4  (2)  &#46;   &#46;   &#46;   &#46;   &#46;   &#46;   &#46;
3  10 | 8   4   2 (10)  &#46;   &#46;   &#46;   &#46;   &#46;   &#46;
4   4 | 8   4   2  10  (4)  &#46;   &#46;   &#46;   &#46;   &#46;
5   3 | 8   4   2  10   4  (3)  &#46;   &#46;   &#46;   &#46;
6   8 | 8   4   2  10   4   3  (8)  &#46;   &#46;   &#46;
7   4 | 8   4   2  10   4   3   8  (4)  &#46;   &#46;
8   2 | 8   4   2  10   4   3   8   4  (2)  &#46;
9   2 | 8   4   2  10   4   3   8   4   2  (2)
-----------------------------------------------
10  8 |(8)  4   2  10   4   3   8   4   2   2
11  5 | 8  (5)  2  10   4   3   8   4   2   2
12 10 | 8   5 (10) 10   4   3   8   4   2   2
13  3 | 8   5  10  (3)  4   3   8   4   2   2
14  8 | 8   5  10   3  (8)  3   8   4   2   2
15  6 | 8   5  10   3   8  (6)  8   4   2   2
16  6 | 8   5  10   3   8   6  (6)  4   2   2
17  9 | 8   5  10   3   8   6   6  (9)  2   2
18  2 | 8   5  10   3   8   6   6   9  (2)  2
19  9 | 8   5  10   3   8   6   6   9   2  (9)
*/
   do _n_=1 by 1 until(last&#46;code); /* 使用dow-loop */
      set raw_data;
      by code;
      pp&#91;index&#93; = p; /* 根据下标变量为数组赋值 */
      index = mod(index+1, &amp;lag_n);         /* 改变下标变量的值,当读第11、21、31&#46;&#46;&#46;条记录时index=0(初值为0) */
      if _n_&gt;=&amp;lag_n then do;  /* 计算部分 */
         cmp = max(of pp&#91;*&#93;) - min(of pp&#91;*&#93;);
         dh = median(of pp&#91;*&#93;);
      end;
      output;  /* 在do-loop的每次循环结束后输出观测 */
   end;

   /* after break-event */
   /* 取消了隐含的outout语句 */

run;[/code:2q25c896]
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-5 19:42 , Processed in 0.278885 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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