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

时间:2013-04-28 16:11:35

标签: 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将如何阅读这一步 - 它将首先读取/执行哪一行?它是从最后开始,然后继续前进吗?或者从顶部开始,然后继续前进? 感谢。

1 个答案:

答案 0 :(得分:5)

SAS数据步骤从上到下处理代码,从 DATA 语句开始,以 RUN; <结尾/ strong>声明。如果代码没有明确的输出语句,则数据步骤会在 OUTPUT; 之前包含隐含的 RUN; 语句。

由于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;

请注意,我添加了一个明确的 OUTPUT; 语句来说明。结果是SAS数据设置,带有一个观察值和三个变量。您的变量total将是缺失值,因为在计算时,amount_a缺失。您还将在SAS日志中收到一条注释,指出“生成了缺失值”。

了解SAS如何做到这一点的最佳位置在 SAS语言参考:概念 一书中。 Here is a link 到SAS 9.3版的书中。请特别阅读 数据步骤处理 一章。