INPUT语句中@和@的区别

在使用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)

共同累积 携手进步

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180511G0J47Y00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券