0

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

在大多数情况下,字段不被单个空格分隔,字段被超过 10 个空格分隔。我使用 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

我尝试为这些编写信息声明,但没有成功

这是我到目前为止所做的

输入 casedt1id:$3。续:4 个国家/地区:&$32。casedt1 yymmdd10。

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

问题是写一个信息语句来读取这些数据?

谢谢您的帮助。

问候贾娜

4

2 回答 2

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
;
于 2018-08-28T18:29:24.143 回答
0

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

input casedt1id $ 1-3 contntid 4-27 country $28-60 casedt1 yymmdd10.;
format casedt1 yymmdd10.;

诀窍是确保指针在尝试读取格式化文本时位于正确的位置。因此,在上面的语句中,通过告诉它读取 COUNTRY 的第 60 列来完成。因此,当您准备阅读日期时,您现在位于第 61 列。您也可以使用+@来移动指针。

... @61 casedt1 yymmdd10. ...

如果您正在读取可变长度文件(现在大多数文件都是可变长度的),请确保将 TRUNCOVER 选项添加到 INFILE 语句,以防日期丢失或使用少于 10 个字符写入。

于 2018-08-28T21:24:26.273 回答