楼主: drizzlechang
342 5

[问答] 关于在SAS里读text file(面试题) [推广有奖]

  • 0关注
  • 0粉丝

已卖:2份资源

大专生

36%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0.0039
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
105 点
帖子
62
精华
0
在线时间
42 小时
注册时间
2011-3-17
最后登录
2022-1-19

楼主
drizzlechang 发表于 2013-10-5 07:42:26 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
求教怎么样把这个text file 读入SAS, 要求最后的和excel file一样。 想了很久但是总想不通怎样有效把中间的dash line去掉,如果只是manually 应该不是题目的目的。请教各位大神!

Final Formatted Dataset.xlsx (13.42 KB) myData.txt (5.31 KB)
二维码

扫码加我 拉你入群

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

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

关键词:file Text TeX ext 面试题 file

沙发
drizzlechang 发表于 2013-10-5 08:19:04
顶顶~大神快出现呀!

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

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

报纸
PhoenixHuang 发表于 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;


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

data _null_;
万分感谢~~!

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

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