SAS - INPUT语句中的@符号

时间:2017-02-13 23:08:11

标签: input sas

我有以下程序,但不明白INPUT行末尾的.getHours()符号是什么:

@

INPUT行末尾没有data colors; input @1 Var1 $ @8 Var2 $ @; input @1 Var3 $ @8 Var4 $ @; datalines; RED ORANGE YELLOW GREEN BLUE INDIGO PURPLE VIOLET CYAN WHOTE FICSIA BLACK GRAY BROWN PINK MAGENTA run; proc print data=colors; run; 的输出与@的输出不同。

您能否澄清第2和第3个INPUT行结束时@的内容是什么?

2 个答案:

答案 0 :(得分:2)

总结:我认为在这种情况下你可能不想要追踪@。输入语句似乎不适合您正在阅读的数据。使用尾随@,您将相同的数据读入var1和var3,并将相同的数据读入var2和var4,因为它读取同一行两次。无论哪种方式,您都没有阅读数据显示的内容。你会更好:

input Var1 $ Var2 $ @;
input Var3 $ Var4 $;

或者更简单:

input Var1 $ Var2 $ Var3 $ Var4 $;

SAS支持网站的官方详细信息,注释如下: http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000146292.htm

  

使用线路保持说明符

     

行保持说明符使指针保持打开状态   

时的当前输入记录      
      
  • 数据记录由多个INPUT语句读取(尾随@)   使用单个尾随@允许下一个INPUT语句从同一记录中读取。
  •   
     

通常,DATA步骤中的每个INPUT语句都会读取新的数据记录   进入输入缓冲区。当您使用尾随@时,以下内容   发生:

     
      
  • 指针位置不会改变。
  •   
  • 没有新记录被读入输入缓冲区。
  •   
  • DATA步骤的同一次迭代的下一个INPUT语句继续读取相同的记录而不是新记录。
  •   
     

SAS会在

时发布由追踪@持有的记录      
      
  • 执行null INPUT语句:       输入;
  •   
  • 没有尾随@exe
  • 的INPUT语句   
  • DATA步骤的下一次迭代开始。
  •   

答案 1 :(得分:2)

@语句末尾的

input表示不会在分号之后前进行指针。 @@表示不会在运行语句之前提前行指针

通常,输入语句在分号后隐式将行指针提前一个。所以:

data want;
  input a b;
  datalines;
1 2 3 4
5 6 7 8
run;
proc print data=want;
run;

将返回

1 2
5 6

如果您想将3 4读入另一行,那么您可以执行以下操作:

data want;
  input a b @;
  output;
  input a b;
  datalines;
1 2 3 4
5 6 7 8
run;
proc print data=want;
run;

哪个给出了

1 2
3 4
5 6
7 8

同样你可以简单地写

data want;
  input a b @@;
  datalines;
1 2 3 4
5 6 7 8
run;
proc print data=want;
run;

要获得相同的结果 - @@将在整个run语句中保持行指针。 (一旦它到达终点,它仍然会前进。)