全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
325 5
2013-10-05
求教怎么样把这个text file 读入SAS, 要求最后的和excel file一样。 想了很久但是总想不通怎样有效把中间的dash line去掉,如果只是manually 应该不是题目的目的。请教各位大神!

myData.txt
大小:(5.31 KB)

 马上下载


二维码

扫码加我 拉你入群

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

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

全部回复
2013-10-5 08:19:04
顶顶~大神快出现呀!
二维码

扫码加我 拉你入群

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

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

2013-10-5 08:29:19
回答你的问题还要交钱。。。相信我, 有人愿意回答你的问题已经很不错了,没人愿意浪费时间来骚扰你的。 这是一个学习的论坛, 不是天涯。
二维码

扫码加我 拉你入群

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

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

2013-10-5 08:38:46
PhoenixHuang 发表于 2013-10-5 08:29
回答你的问题还要交钱。。。相信我, 有人愿意回答你的问题已经很不错了,没人愿意浪费时间来骚扰你的。 这 ...
不常在论坛上,所以就不了解。现在不用金币了,向各位大神求教呀~~
二维码

扫码加我 拉你入群

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

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

2013-10-6 14:39:36
尝试一下, 有些细节就没管它了。 相当ugly的方法,希望能看到更好的

data _null_;
infile "R:\myData.txt" truncover firstobs=5;
file "R:\new.txt" lrecl=500;
input id1 $ 1 id2 $ 4-5 id3 $ 1-3 id4 $ 9-9 id5 $ 2-4 fd $ 1-200;
t1=lag(fd);
if id3 in ("Sun","Mon","Tue","Wed","Fri","Sat","Thu")  then put fd;
if id1 in ('0','1','2','3','4','5','6','7','8','9') then put fd;
if id5="Add" then put@1 "A" @2 fd;
if id4="M" then put @1 t1 @110 fd;
run;

data e f;
  infile "R:\new.txt" truncover;
  retain name;
  retain EmployeeID;       
  input lm $ 1-1 @;
  if lm in ("0","1") then  input @1 EmployeeID :6. name $ 7-30;
  name=compress(name,"0");
  name=compress(name,"1");
  name=compress(name," ");
  if lm in ("S","M","T","W","F")  then do;input Day $ 1-3 Date $ 4-8 In1 $ 11-15 Out1 $ 42-46 ID1 $ 50 In2 $ 52-56 Out2 $ 83-87 Totals 91-95 TotalsCum 99-104 ID2 $ 110 In3 $ 112-116 Out3 $ 143-147 Totals2 192-196 TotalsCum2 200-205;output e;end;
   if lm="A" then do;input Date $ 20-24 Comments1 $ 2-10 CommentTime1 $ 26-30; output f;end;       
run;

proc sort data=f;  by employeeid date;run;

data g;
   set f;
   by employeeid date;
   t1= lag(Comments1); t2= lag(CommentTime1) ;
   if EmployeeID=lag(EmployeeID) and Date=Lag(date) then do c=1;comments2=t1; CommentTime2=t2;put comments2= CommentTime2= EmployeeID= date=;end;
run;

proc sql;
  create table m as select employeeid,date,count(*) as cnt from g group by employeeid, date ;
quit;

data n1;
   merge g m;
   by employeeid date;
run;

proc sort data=n1;  by employeeid date; run;

data n2(keep=name EmployeeID Date Comments1 CommentTime1 Comments2 CommentTime2);
   set n1;
   by employeeid date;
   if first.Date=1 and cnt>1 then delete;                    
run;

proc sort data=e; by employeeid date; run;

proc sql;
  create table t1 as select employeeid,date,count(*) as cnt from e group by employeeid, date ;
quit;

data t2;
  merge e t1;
  by employeeid date;
run;

proc sort data=t2; by employeeid date; run;

data i(drop=lm cnt Totals2 TotalsCum2) ;
  set t2;
  by employeeid date;
  if Totals2 ne . and Totals eq . then Totals=Totals2;
  if TotalsCum2 ne . and TotalsCum eq . then TotalsCum=TotalsCum2;
  if  first.Date and cnt>1  then delete;
run;

data final;
  merge i n2;
  by employeeid date;
run;

proc print data=final;run;


二维码

扫码加我 拉你入群

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

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

2013-10-9 07:16:48
PhoenixHuang 发表于 2013-10-6 14:39
尝试一下, 有些细节就没管它了。 相当ugly的方法,希望能看到更好的

data _null_;
万分感谢~~!
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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