全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2732 3
2009-02-27
比如我有以下的三列数据,我现在想要根据第一列的日期和第二列的时间统计出第三列出现0、1和2分别有多少,如在2007年1月4日,9:30到9:31分之间出现0的个数共有多少?出现1的个数共有多少?出现2的个数共有多少?然后依次类推,统计1月5日出现0、1和2的个数?
请问各位大侠用SAS程序应该如何实现?小弟是SAS新手,先谢谢大家了!

20070104 93000 1
20070104 93004 2
20070104 93010 1
20070104 93014 2
20070104 93020 2
20070104 93024 2
20070104 93030 1
20070104 93034 1
20070104 93040 0
20070104 93044 0
20070105 93050 0
20070105 93054 2
20070105 93100 2
20070105 93104 1
20070105 93110 1
20070105 93114 0
20070105 93120 1
20070105 93124 0
20070105 93130 2
20070105 93134 1
20070105 93140 2
20070105 93144 1
20070105 93150 2
20070105 93154 1
20070105 93200 0
<script type="text/javascript"></script><script src="https://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script><script></script>
二维码

扫码加我 拉你入群

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

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

全部回复
2009-2-28 03:24:00

你的时间数据好象有问提。不同的时间段可用proc format定义。如不考虑时间,可用下面的 proc sql。
data test;
 input date DTime TNumber;
datalines;
20070104 93000 1
20070104 93004 2
20070104 93010 1
20070104 93014 2
20070104 93020 2
20070104 93024 2
20070104 93030 1
20070104 93034 1
20070104 93040 0
20070104 93044 0
20070105 93050 0
20070105 93054 2
20070105 93100 2
20070105 93104 1
20070105 93110 1
20070105 93114 0
20070105 93120 1
20070105 93124 0
20070105 93130 2
20070105 93134 1
20070105 93140 2
20070105 93144 1
20070105 93150 2
20070105 93154 1
20070105 93200 0
;
run;
proc sql;
   select distinct date, Tnumber, count(tnumber) as count
   from test
   group by date, tnumber;
quit;

output
   date   TNumber     count
-----------------------------
20070104         0         2
20070104         1         4
20070104         2         4
20070105         0         4
20070105         1         6
20070105         2         5

二维码

扫码加我 拉你入群

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

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

2009-2-28 12:56:00

感谢yongyitian的回复,时间93010表示9点30分10秒,所以应该是没问题的。

实际数据中9:30~9:31之间出现0的次数应该是3次、出现2的次数应该是5次,但是按照你的程序运行的结果出现0的次数只有2次、出现2的次数只有4次,不知道哪位高手能不能再改改?

谢谢大家。

[此贴子已经被作者于2009-2-28 12:57:26编辑过]

二维码

扫码加我 拉你入群

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

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

2009-3-1 02:04:00

Is this what you want,

proc sql;
  select distinct date,
         case when dtime >=93000 and dtime<93100 then "p1 9:30:00 - 9:30:59"
              when dtime >=93100 and dtime<93200 then "p2 9:31:00 - 9:31:59"
              else "p3 others add here"
              end as Time_period,
         Tnumber,
         count(Tnumber) as count
 from test
 group by date, Time_period, Tnumber;
quit;

output
     date  Time_period            TNumber     count
---------------------------------------------------
20070104  p1 9:30:00 - 9:30:59         0         2
20070104  p1 9:30:00 - 9:30:59         1         4
20070104  p1 9:30:00 - 9:30:59         2         4
20070105  p1 9:30:00 - 9:30:59         0         1
20070105  p1 9:30:00 - 9:30:59         2         1
20070105  p2 9:31:00 - 9:31:59         0         2
20070105  p2 9:31:00 - 9:31:59         1         6
20070105  p2 9:31:00 - 9:31:59         2         4
20070105  p3 others add here           0         1

二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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