我有以下程序,但不明白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行结束时@
的内容是什么?
答案 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语句中保持行指针。 (一旦它到达终点,它仍然会前进。)