SAS - 导入日期分隔符和分隔符相同的文本文件

时间:2017-04-19 02:00:58

标签: sas

我收到了一些从SQL Server中提取的文本文件,需要导入SAS。问题是分隔符是冒号':'

此文件还包含日期时间字段,其中秒由相同的分隔符分隔。

我现在无法更改文本文件提取程序,因为这些文件是回溯提取。

示例数据:

ABCDEFGHI:2015-06-03 00:00:00.000:XYZ
DEFGHI::XYZ
GHIJ:2015-06-04 04:43:19.660:KLMN

由于变量的长度不同,我无法将其作为固定长度文件导入。我尝试将日期时间字段导入单独的日期,小时,分钟和秒字段,但某些记录中缺少日期,这意味着这些记录将没有足够数量的分隔符。

请帮忙。有什么办法可以将这个文件成功导入SAS吗?

1 个答案:

答案 0 :(得分:0)

首先,返回源并请求他们以可用的格式导出文件。如果他们无法修复它,请询问他们是否可以将问题字段移到行尾。

data want ;
   infile 'myfile.txt' dsd dlm=':' truncover ;
   length var1 $20 var2 $8 datetime 8 ;
   input var1 var2 datetime anydtdtm23. ;
   format datetime datetime24.3 ;
run;

但是如果你只有一个可以包含额外分隔符的字段,并且当该字段不为null时出现的分隔符数量是固定的,或者当非空时长度是固定的那么你应该能够编程解决问题。

因此,在您的示例中,您可以将最后两个字段读入字符变量,然后自己解析。

data want ;
   infile cards dsd dlm=':' truncover ;
   length var1 $20 datetime 8 var2 $8 ;
   input var1 str $50.;
   var2 = scan(str,-1,':');
   datetime = input(substrn(str,1,length(str)-length(var2)-1),anydtdtm.);
   format datetime datetime24.3 ;
cards;
ABCDEFGHI:2015-06-03 00:00:00.000:XYZ
DEFGHI::XYZ
GHIJ:2015-06-04 04:43:19.660:KLMN
A::
;