put函数 sas_用CALL EXECUTE进行数据驱动的SAS编程

很多人都知道,macro和loop结合可以成为灵活而强大的SAS程序开发工具,但他们并不是唯一的,还有其他一些有用的工具。最近发现call execute是个很灵活很多变的工具,值得花点时间掌握它。

了解SAS do loop的同学都知道,do loop只能放在data step中。这令很多来自于其他编程语言的同学不太习惯,如果我想循环执行某个proc step该怎么操作呢?这里call execute就能派上用场啦。

下面的内容大部分来自于这篇博客,以及作者的理解:

https://blogs.sas.com/content/sgf/2017/08/02/call-execute-for-sas-data-driven-programming/

先介绍一下call execute语句。CALL EXECUTE语句接受单个参数,该参数是字符串或字符表达式。字符表达式通常是包含SAS代码元素的字符串的联结,这些元素将在解析后被执行。参数表达式的组件可以是string,data step变量,宏变量引用以及宏引用。 CALL EXECUTE在DATA步骤迭代期间动态构建SAS代码,而该代码在DATA步骤在其边界外完成后执行。这使DATA步骤在驱动程序表中迭代出了一个类似于SAS宏循环的SAS代码生成器。

听上去有点绕是吧?我们来分情况看一下。


参数字符串没有宏或宏变量引用

如果CALL EXECUTE的参数字符串没有包含任何宏或宏变量引用的SAS代码,则该代码被简单地推出,并在当前DATA步骤之后附加到队列。当DATA步骤迭代时,代码将被添加到队列中,与DATA步骤的迭代次数一样多。 DATA步骤完成后,队列中的代码按其创建顺序执行,即先进先出的顺序。
这个过程的优点是参数字符串可以是字符常量(被包含在单引号或双引号内)和SAS变量的串联,它们通过CALL EXECUTE为每个DATA步骤迭代替换它们的值。这将产生数据驱动的动态生成的SAS代码,就像迭代的SAS宏循环一样。
让我们考虑以下示例。假设我们需要将多个Oracle表加载到SAS表中。

第一步,生成一个驱动表,其中包含需要提取和加载的表名列表:

/* create a list of tables to extract & load */
libname parmdl '/sas/data/parmdata';
data parmdl.tablelist;
        length tname $8;
        input tname;
        datalines;
ADDRESS
ACCOUNT
BENEFIT
FINANCE
HOUSING
;

该程序运行后将创建驱动表parmdl.tablelist

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值