【问题标题】:Reading the text file incorrectly in sas在 sas 中错误地读取文本文件
【发布时间】:2017-10-18 15:01:54
【问题描述】:

问题陈述:我有一个文本文件,我想使用 SAS INFILE 函数读取它。但是 SAS 没有给我正确的输出。

Text File:
Akash    18 19 20
Tejas       20 16
Shashank 16 20
Meera    18    20

我尝试过的代码:

DATA Arr;
INFILE "/folders/myfolders/personal/SAS_Array .txt" missover;
INPUT Name$ SAS DS R;
RUN;

PROC PRINT DATA=arr;
RUN;

虽然我得到的结果是:

Table of Contents
Obs Name    SAS DS  R
1   Akash   18  19  20
2   Tejas   20  16  .
3   Shashank16  20  .
4   Meera   18  20  .

这是不恰当的。那么代码有什么问题呢?我需要使用与文本文件中相同的标记序列来读取 SAS 中的文件。请帮忙。

预期结果:

Table of Contents
Obs Name    SAS DS  R
1   Akash   18  19  20
2   Tejas    .  20  16  
3   Shashank16  20  .
4   Meera   18   .  20  

提前致谢。

【问题讨论】:

  • 文本文件中的分隔符是什么?它们是制表符还是空格?如果您显示输出应该是什么也会有所帮助
  • 文本文件以空格分隔。请检查我添加了预期输出的代码。
  • 您在帖子中编辑了文本文件示例。现在它看起来真的不像是用空格分隔的,而是固定的宽度。对吗?
  • 没有它的空格分隔文件,对不起,我在发布文本文件时犯了一个错误。
  • 那么请正确发布示例文本文件。空格分隔意味着值由 a 空格字符分隔。在您的示例中,值由可变数量的空格字符分隔。那不是空格分隔的。此处发布的文件是固定宽度。如果值之间有看似随机的空格数您的文本文件中没有缺失值,那么列表输入仍然可以使用。但是,如果值由可变数量的空格分隔并且缺少某些值,则无法判断缺少哪个值。

标签: sas


【解决方案1】:

如果该文本文件是制表符分隔的,您应该在 infile 语句中指定分隔符并使用 dsd 选项来解决缺失值:

DATA Arr;
INFILE "/folders/myfolders/personal/SAS_Array .txt" missover dlm='09'x dsd;
INPUT Name $ SAS DS R;
RUN;

PROC PRINT DATA=arr;
RUN;

编辑: 编辑后,您的示例文本文件现在看起来是固定宽度而不是空格分隔。在这种情况下,您应该使用列输入:

DATA Arr;
INFILE "/folders/myfolders/personal/SAS_Array .txt" missover;
INPUT Name $1-9 SAS 10-12 DS 13-15 R 16-18;
RUN;

数据线示例:

DATA Arr;
INFILE datalines missover;
INPUT Name $1-9 SAS 10-12 DS 13-15 R 16-18;
datalines;
Akash    18 19 20
Tejas       20 16
Shashank 16 20
Meera    18    20
RUN;

【讨论】:

  • 文本文件以空格分隔。能否给出相关的解决方案?
  • 如果值不在固定的列位置,则无法判断三个数字中的哪一个缺失。没有办法区分最后三个记录。
  • @Tom 确实,就像我在我对这个问题的最新评论中所说的那样。如果值被严格地用一个空格分隔仍然是可能的,但这里不是这种情况。
  • 我认为文本文件不是用空格分隔的,而是用空格固定的,这样更容易阅读。
  • @Joe 这也是我的猜测,这也是我在编辑后的答案中所采用的方向
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多