楼主: 2008310148
4487 13

[求助]请问如何提取某一条记录前后各30条的记录 [推广有奖]

11
wolfcrying 发表于 2009-3-13 13:34:00

你可以玩得在高级一点. 用point

data out;

     do i=1 to tot;

  set old(keep=ddatec) point=i nobs=tot;

   if ddatec~=. then do k=i-30 to i+30;

         set old point=k;

         output;

   end;

end;

stop;

run;

记得一定要用stop 啊,否则会死循环的.

[此贴子已经被作者于2009-3-14 15:38:35编辑过]

12
2008310148 发表于 2009-3-14 00:40:00

多谢wolfcrying两次的大力支持,果然是高手的程序阿!

但是我这个菜鸟只会照猫画虎,我理解的set 后跟的old是这些数据所在的的数据集名,然后替换运行之后,系统如此提示:

10   data out;
11     set fdpd point=i nobs=tot;
12      if ddatec^=. then do k=i-30 to i+30;
13         set fdpd point=k;
14           output;
15      end;
16   end;
     ---
     161
ERROR 161-185: 没有匹配的 DO/SELECT 语句。

17   stop;
18   run;

NOTE: SAS 系统由于错误而停止了该步的处理。
WARNING: 数据集 WORK.OUT 可能不完整。该步停止时,共有 0 个观测和 10 个变量。

不知能否再烦请wolfcrying指教一二?我这里出了什么问题?

point命令中语句的具体含义什么呢?使用时有什么要注意的?嘿嘿嘿,真是不好意思啊!

13
wolfcrying 发表于 2009-3-14 15:30:00

不好意思, 可能是复制的时候误删了一个语句。 point的意思就是指定读取某条记录,比如point=5,就是直接读第5条记录

data out;

 do i = 1 to tot;

  set old point=i nobs=tot;

   if ddatec~=. then do k=i-30 to i+30;

         set old point=k;

         output;

   end;

end;

stop;

run;


 一定要stop;

[此贴子已经被作者于2009-3-14 15:36:45编辑过]

14
2008310148 发表于 2009-3-14 22:59:00

测试成功,谢谢嗷!

多谢wolfcrying对新手的大力支持,记得让版主给你加钱哦!

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 09:51