在使用INPUT STATEMENT读取变量数据的时候,其结尾常常会用到@或@@,它们是line-hold specifiers,用来指定指针的位置。
在实际应用中,常常会产生混淆,在自己编程时不确定使用哪个能按照预期读取变量数据,在解读已有的程序时无法清晰的判断各变量的取值结果。今天,我们就来聊聊@和@@的区别。
首先,在没有@或@@的情况下,在执行完INPUT STATEMENT时,指针将自动跳至下一行,而有@或@@的情况下,指针将停留在当前行。
而@和@@不同的地方在于指针停留的时效,其中@仅能停留到下一个INPUT STATEMENT,在DATA步进行下一次迭代构建下一个observation时解除停留,而@@不但能停留到下一个INPUT STATEMENT,而且即使在DATA步进入下一个迭代构建下一个observation时也不解除停留,直至执行下一个DATA步解除停留。
另外,每一个DATA步是可以有多个INPUT STATEMENT的,@和@@只对所在INPUT STATEMENT有效,也就是说,假设一个INPUT STATEMENT后有@@,会控制指针停留在当前行,并且在DATA步进入下一个迭代构建下一个observation时也保持停留,但是如果后面还有INPUT STATEMENT,而这个INPUT STATEMENT后面没有@和@@,那么在执行后一个INPUT STATEMENT后指针将跳至下一行(当然,如果此INPUT STATEMENT后面有@,也要看DATA步是否将要进行下一次迭代构建下一个observation,来判断指针是否跳至下一行)。
下面我们通过几个示例的比较详细解读一下它们的差别:
Reference:
1) SAS®CertificationPrep Guide: Base Programming for SAS®9, Third Edition.
2) The Little SAS®Book: A Primer, Fifth Edition.
数湃(Data Palette)
共同累积 携手进步
领取专属 10元无门槛券
私享最新 技术干货