输入在行尾保留缺失记录

时间:2015-02-25 20:45:06

标签: sas

我正在学习一本小书。以下是书中的代码。和原始数据。问题是当我运行它时,最终的数据集在行尾没有丢失记录,即它保持缺失75和56,并将它们标记为缺失("。")。任何人都可以指出问题可能出在哪里?当我在行末75和56之后添加空格时,问题就消失了。

DATA class;
INFILE 'c:\MyRawData\Scores.dat';
INPUT Score @@;
RUN;
PROC UNIVARIATE DATA = class;
VAR Score;
TITLE;
RUN;

该文件中的数据:

56 78 84 73 90 44 76 87 92 75
85 67 90 84 74 64 73 78 69 56
87 73 100 54 81 78 69 64 73 65

运行后显示更像

56 78 84 73 90 44 76 87 92 .
85 67 90 84 74 64 73 78 69 .
87 73 100 54 81 78 69 64 73 65

1 个答案:

答案 0 :(得分:1)

我怀疑你的行尾有什么问题;要么你有一个虚假的角色,要么你的行尾以某种方式是不正确的。很可能你使用的是Windows文件并且你在Unix中运行,所以你有

75CRLF85

因为Unix只使用LF作为行终止符,所以它会看到" 75CR" endofline" 85&#34 ;, not" 75"内线" 85"喜欢它。

在这种情况下,你可以做你做过的事情 - 增加一个空间,尽管这可能会留下一些空白的空白'记录在那里 - 或在TERMSTR语句中使用infile告诉SAS如何正确读取文件。

否则,您可能会有一些虚假的结束字符 - 例如,如果您从网上粘贴此字符,则可能会有一个不会转换为常规空间的不间断空格。

你可以这样做:

data _null_;
  infile 'c:\rawdata\myfile.dat';
  input @;
  put _infile_ $HEX60.;
run;

60是线长度的2倍。这告诉你SAS看到了什么。你应该看到什么:

3536203738203834203733203930203434203736203837203932203735
3835203637203930203834203734203634203733203738203639203536
383720373320313030203534203831203738203639203634203733203635

ASCII中的数字是30 +数字,因此35是5,36是6等。空格是20.第一行:

35|36|20|37|38|20|38|34|20|37|33|20| ...

所以5 6空间7 8空间3 8空间7 3空间。如果您在37 35之后看到其他内容,那么您就知道存在问题。您可能会看到以下任何内容:

  • 0A =换行。
  • 0D =回程。
  • A0 =不间断(网络)空间。

你可以看到很多其他的东西,但那些最有可能让你失望的东西。从网上粘贴通常是个问题。