解释SAS读取数据步骤的顺序(概念)

解释SAS读取数据步骤的顺序(概念),sas,execution,datastep,Sas,Execution,Datastep,我需要了解SAS如何读取/执行数据步骤。当我查找有关SAS如何读取数据步骤的信息时,我似乎只找到了有关它如何读取以用于合并目的的信息,而我不了解与常规数据步骤相关的信息。比如说,我有一行代码: data work.DATA; if amount_a= . then amount_a= 1; amount_b= 1; amount_a= . ; total = (amount_a + amount_b) + 0 ; run; 现在,考虑到这一点,“总数”等于多少? 我想

我需要了解SAS如何读取/执行数据步骤。当我查找有关SAS如何读取数据步骤的信息时,我似乎只找到了有关它如何读取以用于合并目的的信息,而我不了解与常规数据步骤相关的信息。比如说,我有一行代码:

data work.DATA;
  if amount_a= . then
     amount_a= 1;
  amount_b= 1;
  amount_a= . ;
  total = (amount_a + amount_b) + 0 ;
run;
现在,考虑到这一点,“总数”等于多少? 我想知道,从本质上讲,SAS将如何读取此步骤——它将首先读取/执行哪一行?它是从最后一个开始,然后逐渐上升吗?还是从顶部开始,然后一路向下?
谢谢。

SAS data步骤从上到下处理代码,从
data
语句开始,以
运行结束语句。数据步骤具有隐含的
输出语句包含在运行
之前如果代码没有明确的输出语句

由于SAS是一种“解释”语言,因此每个数据步骤的代码都是在执行之前编译的。编译的一部分涉及创建一个名为程序数据向量(PDV)的结构,该结构包含程序使用的所有变量的执行属性。变量按照它们在代码中出现的顺序(从上到下)定义到PDV

一个方便的调试工具是
PUTLOG
语句,在程序执行期间,可以使用该语句将输出写入SAS日志文件。例如,考虑这一点:

data work.DATA;
   if amount_a= . then
      amount_a= 1;
   amount_b= 1;
putlog amount_a= amount_b=;
   amount_a= . ;
putlog amount_a= amount_b=;
   total = (amount_a + amount_b) + 0 ;
putlog amount_a= amount_b= total=;
   output;
run;
注意,我添加了一个显式的
输出语句以进行说明。结果是一个SAS数据集,包含一个观察值和三个变量。您的变量
total
将丢失,因为在计算时,
amount\u a
丢失。您还会在SAS日志中看到一条注释,指出“生成了缺少的值”


了解SAS如何做到这一点的最好地方是在《SAS语言参考:概念》一书中至SAS 9.3版手册。特别是,请阅读关于数据步骤处理的章节

感谢您的澄清!非常有用。