Mik*_*e L 3 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;
Run Code Online (Sandbox Code Playgroud)
现在,鉴于此,"总"等于什么?我想知道,基本上,SAS将如何阅读这一步 - 它将首先读取/执行哪一行?它是从最后开始,然后继续前进吗?或者从顶部开始,然后继续前进?谢谢.
SAS数据步骤从上到下处理代码,从DATA语句开始到结束RUN;语句.如果代码没有显式输出语句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;
Run Code Online (Sandbox Code Playgroud)
请注意,我添加了一个明确的OUTPUT;声明来说明.结果是具有一个观察和三个变量的SAS数据集.您的变量total将是缺失值,因为在计算时,amount_a缺少该变量.您还将在SAS日志中收到一条注释,指出"生成了缺失值".
了解SAS如何做到这一点的最佳位置在SAS语言参考:概念书中. 这是 SAS 9.3版本书的链接.特别是,请阅读有关数据步骤处理的章节.