Input SAS列输入

Input SAS列输入,input,sas,Input,Sas,我在实现以下代码时发现一个奇怪的输出 data ex; input a $ 1-80 b $; datalines; 1 2 3 4 5 6 数据集ex为: a b 1 2 3 然后 数据集ex2是: a b 3 4 5 最后,我创建了一个txt文件,其中包含: 1 2 3 4 5 6 跑 data ex3; infile '/.../test.txt'; input a $ 1-10 b $ ; 数据集ex3

我在实现以下代码时发现一个奇怪的输出

data ex;
    input a $ 1-80 b $;
    datalines;
1 2
3 4
5 6
数据集ex为:

a       b
1 2     3
然后

数据集ex2是:

a        b
3 4      5
最后,我创建了一个txt文件,其中包含:

1 2
3 4
5 6

data ex3;
    infile '/.../test.txt';
    input a $ 1-10 b $ ;
数据集ex3是:

a        b
3 4      5
有人能解释一下缓冲区和PDV是如何得到奇怪的结果的吗?非常感谢

所有结果都基于SAS Studio(大学版)。

我得到了这个

 Obs     a     b

  1     1 2    3
用这个日志

27         data ex;
28             input a $ 1-10 b $;
29             datalines;

NOTE: LOST CARD.
RULE:      ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0                     
33         ;;;;
a=5 6 b=  _ERROR_=1 _N_=2
NOTE: SAS went to a new line when INPUT statement reached past the end of a line.
NOTE: The data set WORK.EX has 1 observations and 2 variables.

你讲的是整个故事吗?

当你从数据线(卡)中读取数据时,SAS会将线路大小四舍五入到80的倍数。从单独的文件读取时,它不会执行此操作

所以在这个例子中:

data ex;
  input a $ 1-80 b $;
cards;
1 2
3 4
5 6
;
您将完整的80列卡片图像读取到A中,然后当您尝试读取B时,它需要转到下一行,因此它一直读取到第2行的第一个空格。因此
a='12'
b='3'
。然后,当它试图读取下一个观察值时,它会将该行读入A,并耗尽要读入B的信息,因此当它读取到输入结束时,它会停止,并且不会写入第二个观察值

在第二个示例中,您试图将多行内容读入,因此SAS转到新行并读取
'3 4'
。不知道为什么它没有从那一行读到80多个,但看起来它没有。因此,当它想要读取B时,它从最后一行获得
5

你的最后一个例子和第二个一样。您的外部文件的第一行可能只有5个字符。所以当你试着读10个字符时,它跳到下一行读A,然后又不得不跳到最后一行为B读


如果您希望它只从一行读取数据,而不是在搜索数据时“流动”到下一行,则将
TRUNCOVER
选项添加到infle语句中。读取卡片图像时,您可以使用内嵌卡片或内嵌数据线。

很抱歉让您感到困惑。我现在纠正这个问题。下一次,我会在发布之前再检查一遍。
data ex;
  input a $ 1-80 b $;
cards;
1 2
3 4
5 6
;