为什么在以下程序中创建了这么多观察结果?

时间:2016-02-07 12:09:21

标签: sas sas-macro

    data test;
    infile cards dsd dlm=', .';
    input stmt : $ @@;
    cards;
    T
    ;run;
/*-----------------------------------------------*/
    data test;
    infile cards dsd dlm=', .';
    input stmt : $ @@;
    cards;
    Th
    ;run;
/*-----------------------------------------------*/
    data test;
    infile cards dsd dlm=', .';
    input stmt : $ @@;
    cards;
    This is SAS.
    ;run;

运行第一个程序时,会创建80个观察值 运行第二个程序时,将创建79个观察值 运行第三个程序时,将创建72个观察值

我知道这些程序编程风格最差。为错误的技术设置了错误的选项。 DSD选项设置,双尾运算符@@(行持有者),使用冒号修饰符(:),使用超过1个分隔符,这是有史以来最差的SAS编程。

除此之外,我想知道为什么要创建如此多的观察,为什么80? 79?程序是如何执行的?我认为DSD选项& 2个分界线有重大影响。谁能解释一下?

1 个答案:

答案 0 :(得分:1)

您获得的记录超出预期的原因是因为CARDS是固定长度的记录。您获得不同记录数的原因是因为在读取非空字段后会留下不同数量的空字段。您可以通过向INFILE语句添加COL选项来显示此信息,以显示读取每个字段后列指针的位置。 Col = 3,4,13

data test;
infile cards dsd dlm=', .' col=c;
input stmt : $ @@;
col=c;
cards;
T
;run;
proc print data=test(obs=5);
/*-----------------------------------------------*/
data test;
infile cards dsd dlm=', .' col=c;
input stmt : $ @@;
col=c;
cards;
Th
;run;
proc print data=test(obs=5);
/*-----------------------------------------------*/
data test;
infile cards dsd dlm=', .' col=c;
input stmt : $ @@;
col=c;
cards;
This is SAS.
;run;
proc print data=test(obs=5);
run;

enter image description here