全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
5037 4
2013-08-13
悬赏 10 个论坛币 未解决
有下面的一段数据表A(我只取了100万行数据前十行):
姓名进入时间离开时间
小明2013/05/23  09:08:222013/05/23  11:08:22
小明2013/05/24  04:03:122013/05/24  16:25:01
小明2013/05/26  19:08:222013/05/26  22:52:11
小明2013/05/27  02:35:222013/05/27  09:08:22
小红2013/05/21 01:56:212013/05/23  08:08:08
小红2013/05/23  23:08:222013/05/24  02:01:11
小张2013/06/01  15:05:252013/06/01  24:00:00
小陆2013/06/03  02:03:262013/06/03  09:11:55
小陆2013/06/20  02:03:422013/06/23  12:18:56


现在要做一下分析:

(1)计算每个人每相隔两次进入日期之差,返回天数,如果天数大于30,进行标记并在数据集B(候选名单)中删除;如果某个人(如小张)只进入过一次的,进行标记也在数据集B(候选名单)中删除。
(2)提取六月1号后一个月内某人进入的最早时间、以及六月1号前一个月这个人进入的最后时间之差,如果差值超过30天标记为1,少于30天标记为零,如果六月一号前一个月没有登录,也标记为1。
(3)计算每个人在五月1日到六月1日期间,到位时间总和,返回秒(每次到位时间=离开时间-进入时间)。
急需解决,等待大神



二维码

扫码加我 拉你入群

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

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

全部回复
2013-8-13 07:29:17
顶起
二维码

扫码加我 拉你入群

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

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

2013-8-13 11:34:44
Question 2;
复制代码
二维码

扫码加我 拉你入群

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

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

2013-8-14 11:46:15
data a;                                                                                                                                 
length name $15.;                                                                                                                       
input name $ date1 $10. time1 $ date2 $10. time2 $ ;                                                                                    
datalines;                                                                                                                              
XiaoMing 2013/05/23 09:08:22 2013/05/23 11:08:22                                                                                       
XiaoMing 2013/05/24 04:03:12 2013/05/24 16:25:01                                                                                       
XiaoMing 2013/05/26 19:08:22 2013/05/26 22:52:11                                                                                       
XiaoMing 2013/05/27 02:35:22 2013/05/27 09:08:22                                                                                       
XiaoMing 2013/06/26 02:35:22 2013/06/27 09:08:22                                                                                       
XiaoHong 2013/05/21 01:56:21 2013/05/23 08:08:08                                                                                       
XiaoHong 2013/05/23 23:08:22 2013/05/24 02:01:11                                                                                       
XiaoHong 2013/06/23 23:08:22 2013/06/24 02:01:11                                                                                       
XiaoZhang 2013/01/01 15:05:25 2013/01/01 24:00:00                                                                                       
XiaoZhang 2013/06/01 15:05:25 2013/06/01 24:00:00                                                                                       
XiaoLu 2013/05/03  02:03:26 2013/05/03 09:11:55                                                                                         
XiaoLu 2013/06/03  02:03:26 2013/06/03 09:11:55                                                                                         
XiaoLu 2013/06/23  02:03:42 2013/06/29 12:18:56                                                                                         
XiaoJiu 2013/06/01 15:05:25 2013/06/01 24:00:00                                                                                         
;                                                                                                                                       
run;                                                                                                                                    
                                                                                                                                       
data a1;                                                                                                                                

                                                                                                                                       
set a;                                                                                                                                 

                                                                                                                                       
indate1=input(date1,yymmdd10.);                                                                                                         

                                                                                                                                       
intime=put(indate1,date9.)||' '||time1;                                                                                                

                                                                                                                                       
intime1=input(intime,DATETIME18.);                                                                                                      

                                                                                                                                       
outdate1=input(date2,yymmdd10.);                                                                                                        

                                                                                                                                       
outtime=put(outdate1,date9.)||' '||time2;                                                                                               

                                                                                                                                       
outtime1=input(outtime,DATETIME18.);                                                                                                   

                                                                                                                                       
usetime=outtime1-intime1;                                                                                                               
run;                                                                                                                                    
                                                                                                                                       
proc sort data=a1 out=a2;                                                                                                               
by name;                                                                                                                                
run;                                                                                                                                    
data a3;                                                                                                                                
set a2;                                                                                                                                 
by name;                                                                                                                                
retain x;                                                                                                                              
if first.name then x=0;                                                                                                                 
x+1;                                                                                                                                    
run;                                                                                                                                    
data a4;
                                                                                                                              
set a2;                                                                                                                                 
by name;                                                                                                                                
retain y;                                                                                                                              
if first.name then y=0;                                                                                                                 
y+1;                                                                                                                                    
if last.name then output;                                                                                                               
keep name y;                                                                                                                           
run;                                                                                                                                    
data fa;                                                                                                                                
merge a3 a4;                                                                                                                           
by name;                                                                                                                                
run;                                                                                                                                    
data b1;                                                                                                                                
set fa;                                                                                                                                 
if y=1 then delete;                                                                                                                     
if dif(x)>0 and dif(indate1)>30 then delete;                                                                                            
run;                                                                                                                                    
data b2;                                                                                                                                
set fa(keep=name date1 indate1 x);                                                                                                      

mouth=substr(date1,6,2);                                                                                                               

demouth=lag(mouth);
                                                                                                                  
if x=1 then demouth=.;                                                                                                                  
if mouth-demouth>0 and dif(indate1)>30 then mark=1;                                                                                    
else if mouth =06 and demouth=. then mark=1;                                                                                            
else mark=0;                                                                                                                           
drop mouth demouth x;                                                                                                                  
run;                                                                                                                                    
data fa1;                                                                                                                              
set fa;                                                                                                                                 
indate='2013/05/01';                                                                                                                    
outdate='2013/06/01';                                                                                                                  
if indate<date1<outdate then output;                                                                                                   
run;                                                                                                                                    
data b3;                                                                                                                                
set fa1;                                                                                                                                
by name;                                                                                                                                
retain worktime;                                                                                                                        
if first.name then worktime=0;                                                                                                         
worktime=worktime+usetime;                                                                                                              
if last.name then output;                                                                                                               
run;
              
B1 B2 B3是结果   
二维码

扫码加我 拉你入群

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

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

2013-8-18 01:05:20
akakak123 发表于 2013-8-14 11:46
data a;                                                                                              ...
太感谢上面两位大侠的了,我真的受益匪浅!

可是我还有些不懂要请问一下@akakak123,问题二好像没有解决,请问一下以下这段代码是什么意思呢?demouth=lag(mouth);                                                                                                  
if x=1 then demouth=.;                                                                                                                  if mouth-demouth>0 and dif(indate1)>30 then mark=1;                                                                                    
else if mouth =06 and demouth=. then mark=1;  

我没有弄懂这段代码的意思,可以麻烦您简单解释一下吗,谢谢!



二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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