楼主: tiantianwo
6249 11

请教关于sas做数据分组 [推广有奖]

  • 0关注
  • 1粉丝

已卖:490份资源

本科生

52%

还不是VIP/贵宾

-

威望
0
论坛币
8393 个
通用积分
12.2252
学术水平
0 点
热心指数
1 点
信用等级
0 点
经验
1174 点
帖子
51
精华
0
在线时间
67 小时
注册时间
2005-4-1
最后登录
2011-10-4

楼主
tiantianwo 发表于 2010-6-2 22:30:44 |AI写论文
20论坛币
有一组 数据是以hh:mm:ss表示的,比如9:30:00    9:31:00   9:31:50    ,。。。。,15:00:00
要以11分钟为时间间隔对数据移动分组,比如
9:30:00  9:41:00 9:52:00,。。。。,14:40:00,14:51:00标记为一组;
9:31:00  9:42:00 9:53:00,。。。。。,14:41:00,14:52:00标记为第二组;
.
.
.
9:39:00  9:50:00  10:01:00,。。。。,14:39:00  15::00:00标记为最后一组
请各位大侠各抒己见,不吝赐教!

关键词:数据分组 各抒己见 各位大侠 时间间隔 数据 请教 SAS 分组

回帖推荐

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

Here is an example. data time; do time=9*3600+1800 to 15*3600 by 100; output; end; format time time8.; run; %let stime=%eval(9*3600+1800); data group; set time; group=int( (time-&stime)/(11*60) )+1; run; proc print; run;

本帖被以下文库推荐

沙发
bobguy 发表于 2010-6-3 10:04:00
tiantianwo 发表于 2010-6-2 22:30
有一组 数据是以hh:mm:ss表示的,比如9:30:00    9:31:00   9:31:50    ,。。。。,15:00:00
要以11分钟为时间间隔对数据移动分组,比如
9:30:00  9:41:00 9:52:00,。。。。,14:40:00,14:51:00标记为一组;
9:31:00  9:42:00 9:53:00,。。。。。,14:41:00,14:52:00标记为第二组;
.
.
.
9:39:00  9:50:00  10:01:00,。。。。,14:39:00  15::00:00标记为最后一组
请各位大侠各抒己见,不吝赐教!
Here is an example.

data time;
  do time=9*3600+1800 to 15*3600 by 100;
      output;
end;
format time time8.;
run;

%let stime=%eval(9*3600+1800);

data group;
  set time;
  group=int( (time-&stime)/(11*60) )+1;
run;

proc print; run;
已有 1 人评分学术水平 热心指数 收起 理由
crackman + 1 + 1 精彩帖子

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

藤椅
tiantianwo 发表于 2010-6-8 14:21:52
谢谢楼上的,但是这样做仍然没有办法实现移动分组,这样可以实现9:30:00  9:41:00 9:52:00,。。。。,14:40:00,14:51:00以11分钟为间隔分组,但是9:31  9:42。。。。则没有办法实现,也就是说第一组的起点没有办法移动

板凳
yatming 发表于 2010-6-8 14:55:35
步长估计bobguy大侠写错了,应该改为60做测试比较好吧。
data time;
do time=9*3600+1800 to 15*3600 by 60;
output;
end;
format time time8.;
run;

%let stime=%eval(9*3600+1800);

data group;
set time;
group=int( (time-&stime)/(11*60) )+1;
group2=mod( (time-&stime)/60,11)+1;
run;

group2:
9:30 9:41 9:52 ....标为第一组
9:31 9:42 9:53 ....标为第二组
9:32 9:43 9:54 ....标为第三组
...

报纸
soporaeternus 发表于 2010-6-8 14:59:09
楼主的样例分组貌似不是按11分钟分组的
我的理解是以数列头m个数为各子列的首项,然后以11分钟为公差构造子列
原数列是否以11分钟为公差并没有关系
如果是这样的话,在数据量不太大的情况下可以这样做
  1. data time;
  2.   do time=9*3600+1800 to 15*3600 by 60;
  3.           n+1;
  4.       output;
  5. end;
  6. format time time8.;
  7. run;

  8. proc sql;
  9.         create table group as
  10.                 select
  11.                         a.n as Grp
  12.                         ,b.time
  13.                 from time a
  14.                 inner join time b
  15.                 on
  16.                         a.time<=b.time
  17.                 and mod(b.time-a.time,660)=0
  18.                 where a.n between 1 and 10
  19.                 order by
  20.                         a.n
  21.                         ,b.time
  22.         ;
  23. quit;
复制代码
为了某些偷懒的原因,我对原始数据进行了基于自然数列的标记
希望对你有用
希望各位高手指正......
Let them be hard, but never unjust

地板
yatming 发表于 2010-6-8 15:22:20
楼主的数列好像有点问题:
9:30:00  9:41:00 9:52:00,。。。。,14:40:00,14:51:00标记为一组
如果间隔为11分钟,14:40,14:51不会出现在第一组吧,反而14:59与9:30相隔的分钟数是整除11的,所以15:00应该为第一组的最后一个元素,以此类推14:49为第一组倒数第二个元素,楼主是不是写错了。

以1分钟为步长的数据,总共331条,分为11组,除第一组31个元素外,其余组都是30个元素。

7
tiantianwo 发表于 2010-6-8 20:06:06
谢谢以上各位大侠,以9:30为起点,11分钟的时间间隔为例:
9:30:00  9:41:00 9:52:00,。。。。。第一组;
9:31:00  9:42:00  9:52:00,.......第二组;
9:32:00  9:43:00  9:53:00,。。。第三组;
.....
以此类推,一共分了9组,
最后一组是
9:40:00  9:50:00  10:00::00,。。。
因此问题的关键是实现对第一个时间起点进行移动,从而产生不同的组
另外soporaeternus大侠的方法是用自然数标记数据的顺序,但是实际数据的时间本身是不规则的,比如93018
9:30:25
9:30:28
9:30:32
9:30:40
9:30:43
。。。。。
因此无法用每10个或者其他间隔进行分组

8
tiantianwo 发表于 2010-6-8 20:23:34
我是用matlab解决这个问题的,用matlab计算是
for l=1:10;
for i=1:k;
M(:,5+l)=floor((M(:,4)-9*3600-30*60-(l-1)*60)/60/10)+1;
end
end
不过matlab运算时间很久,不知道sas如何写?能否提高运算效率?
另外需要做每组第一个和最后一个数的差,不知道如何用sas实现呢

9
soporaeternus 发表于 2010-6-8 21:47:20
8# tiantianwo
我取自然数标记仅仅为了提取前m个元素作为m个子列的首元素方便,并不牵涉到源数据本身的性质
只要提取的子列的公差确定,那么SQL自连的方法就可以做
如果是纯粹给定m个首元素、公差和项数,不需要和源数据做交集,直接给出这m个数列的话,data步就可以直接做
Let them be hard, but never unjust

10
论坛数据分析 发表于 2011-1-25 14:52:57
老夫聊发少年狂

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

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