@,@@,# 是input语句中的指针控制命令;
1)@ 表示执行下一个操作时,指针移到下一个记录(也就是下一行)
eg1:仅有一行数据
data age;
input id age @; /*使用一个@*/
cards;
1 23 2 29 3 49 4 36
;
run;/*数据占用一行空间,此时SAS仅读了1次,显然没有读完,与我们期待不同,就跳到下一行阅读下一个数据,因为下一行没有数据可读,所以就读了一次就完了*/
proc print data=age;
run;
eg2:多行数据
data age;
input id age @; /*使用一个@*/
cards;
1 23 2 29 3 49 4 36
5 23 6 29 7 49 8 36
;
run;/*每行数据占用一行空间,此时SAS仅读了2次,显然没有读完,就跳到下一行阅读下一个数据,也就是光标就跳到了下一行*/
proc print data=age;
run; 下图非期待结果
2) @@ 表示执行下一个操作时,指针保持在当前记录(当前行)
SAS默认每行读取的数据是和变量数对应的,比如有2个变量,SAS每行就会只读2个数,读完后立刻转到第二行继续读取,而不管右边是否有数据,强制SAS向后看的方法就是在input语句的最后一个变量后面加上@@符号,
eg1:仅有一行数据
data age;
input id age@@; /*使用@@数据可以在当前行连续阅读*/
cards;
1 23 2 29 3 49 4 36
;
proc print;
run; 下图才是我们期待的结果
eg2:多行数据
data age;
input id age @@; /*使用一个@*/
cards;
1 23 2 29 3 49 4 36
5 23 6 29 7 49 8 36
;
run;/*每行数据占用一行空间,此时SAS每连续读完一行就开始下一记录(下一行)*/
proc print data=age;
run;
3)# 行的控制指令 #4代表仅读取第四行,如下示例
data c;
input # 4 name $;
cards;
sara
kate
marry
haryy
tom 下图SAS仅读取了第四行数据
;
run;