3

我需要了解 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 将如何读取此步骤——它将首先读取/执行哪一行?它是从最后开始,然后一直向上吗?还是从顶部开始,然后一路向下?谢谢。

4

1 回答 1

5

SAS 数据步骤从上到下处理代码,从语句开始,到DATA语句结束RUN;。数据步骤在if 代码没有显式输出语句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 语言参考:概念书。 这是SAS 9.3 版书籍的链接。特别是,请阅读Data Step Processing一章。

于 2013-04-28T17:07:05.163 回答