1 data mysas.guanhui_nov; 2 infile 'E:\SAS\mysas\visit_guanhui_nov.txt' dlm='|' firstobs=2; 3 input user :$11. serv_num:$11. log_date :$14. log_IP :$15. content :$50.; 4 my_year=input(substr(log_date,1,4),4.); 5 my_mon=input(substr(log_date,6,2),2.); 6 my_day=input(substr(log_date,9,2),2.); 7 my_date=mdy(my_mon,my_day,my_year); 8 format my_date MMDDYY10.; 9 date_time=DHMS(my_date,hour(my_time),minute(my_time),second(my_time));10 format date_time datetime18.;11 run;12 proc print data=mysas.guanhui_nov (firstobs=1 obs=10);13 run;
对于不固定长度的变量,冒号用于读满规定长度字符或者遇到变量分隔符,先到为准。另外对于非标准格式的日期,可以用字符串处理函数substr+input+mdy+format+dhms等来实现重组标准时间格式变量。
还有input 变量长度后面的"."不能丢。
我的实现:
1 data guanhui.uservisit_nov; 2 infile 'E:\a.txt' dlm='|' firstobs=2; 3 input user :$11. serv_number :$11. login_time :$14. log_IP :$15. content :$50.; 4 visit_yymmdd=substr(login_time,1,10); 5 visit_y=substr(visit_yymmdd,1,4); 6 visit_month=substr(visit_yymmdd,6,2); 7 visit_d=substr(visit_yymmdd,9,2); 8 visit_hm=substr(login_time,11,15); 9 visit_h=scan(visit_hm,1,':');10 visit_min=scan(visit_hm,2,':');11 visit_time=DHMS(MDY(visit_month,visit_d,visit_y),visit_h,visit_min,0);12 run;13 proc print data=guanhui.uservisit_nov (firstobs=1 obs=5);14 format visit_time datetime18.;15 where serv_number='134********';16 run;
1、冒号用来处理不定长变量。
2、substr函数用来从长字符串中取出部分。
3、scan函数用来取用分隔符分割的字符串。
4、mdy函数用来组合date日期。
5、dhms用来组合完整日期。