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

sas读取以空格作为分隔符的文件,sas,datastep,informat,Sas,Datastep,Informat,我有一个数据文件,它使用空格作为分隔符。我想写一个数据步骤,将此文件读入sas 在大多数情况下,字段不是由单个空格分隔的,而是由10多个空格分隔的。我已经使用notepad++进行了检查,分隔符不是制表符 137 3.35 Afghanistan 2009-07-08 154 2.43 Albania 2009-07-22 101

我有一个数据文件,它使用空格作为分隔符。我想写一个数据步骤,将此文件读入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美元。案例1 yymmdd10

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

问题是写一个informat语句来读取这些数据

谢谢你的帮助

问候
jana

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

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
;

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

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
;

在我看来,这就像是固定列数据。然后,问题是使用具有固定列数据的信息。这应该行得通

input casedt1id $ 1-3 contntid 4-27 country $28-60 casedt1 yymmdd10.;
format casedt1 yymmdd10.;
诀窍是确保指针在读取格式化文本时位于正确的位置。因此,在上面的声明中,这是通过让它读到第60列来完成的。现在,当您准备好读取日期时,您位于第61列。您还可以使用
+
@
移动指针

... @61 casedt1 yymmdd10. ...

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

这在我看来像是固定列数据。然后,问题是使用具有固定列数据的信息。这应该行得通

input casedt1id $ 1-3 contntid 4-27 country $28-60 casedt1 yymmdd10.;
format casedt1 yymmdd10.;
诀窍是确保指针在读取格式化文本时位于正确的位置。因此,在上面的声明中,这是通过让它读到第60列来完成的。现在,当您准备好读取日期时,您位于第61列。您还可以使用
+
@
移动指针

... @61 casedt1 yymmdd10. ...

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

数据是否真的像您的示例那样位于固定列中?您是否尝试告诉SAS每个变量要读取哪些列?数据是否真的像您的示例那样位于固定列中?您是否尝试告诉SAS每个变量要读取哪些列?