sas以空格作为分隔符读取文件

时间:2018-08-28 17:58:25

标签: sas datastep informat

我有一个使用空格作为分隔符的数据文件。我想编写一个数据步骤以将该文件读入sas。

在大多数情况下,这些字段之间不会被单个空格分隔。我已经使用notepad ++进行了检查,并且定界符不是制表符。

137          3.35          Afghanistan                      2009-07-08 
154          2.43          Albania                          2009-07-22
101          1.22          Antigua and Barbuda              2009-06-24 
155          4.13          Federated States of Micronesia   2009-07-22

我尝试为这些内容编写informat语句,但未成功

这是我到目前为止所做的

输入casedt1id:$ 3。竞争性:4国家:&$ 32。 casedt1 yymmdd10。

这只会正确读取第一个字段,其余字段会丢失值。

问题是编写一个informat语句以读取此数据?

感谢您的帮助。

致谢 贾纳(Jana)

2 个答案:

答案 0 :(得分:2)

您可以使用@符号来控制指针在行上的读取位置。看起来每个变量都有固定的起始列。

data want;
input @1 casedt1id :$3. @14 contntid :4 @28 country :&$32. @61 casedt1 :yymmdd10.;
format casedt1 yymmdd10.;
datalines;
137          3.35          Afghanistan                      2009-07-08 
154          2.43          Albania                          2009-07-22
101          1.22          Antigua and Barbuda              2009-06-24 
155          4.13          Federated States of Micronesia   2009-07-22
;

答案 1 :(得分:0)

对我来说,这看起来像固定列数据。然后,问题是使用具有固定列数据的INFORMAT。这应该起作用

th

技巧是确保指针在尝试读取格式化的文本时位于正确的位置。因此,在上面的语句中,通过告诉它读取COUNTRY的第60列来完成此操作。因此,当您准备好阅读日期时,现在位于第61列。您也可以使用tdinput casedt1id $ 1-3 contntid 4-27 country $28-60 casedt1 yymmdd10.; format casedt1 yymmdd10.; 移动指针。

+

如果要从可变长度文件中读取(现在大多数文件都是可变长度),请确保在INFILE语句中添加TRUNCOVER选项,以防万一日期丢失或少于10个字符写入。