关于sas宏的一点想法

有人说把sas宏比作其他语言的函数,但是我做此类比的时候陷入了死胡同,没有成功,举一例,如果是函数就要有返回值,sas宏的返回又是什么。而且sas宏涉及到编译阶段,导致很难理解。

直到看到了一个人说,宏是帮你写程序的程序,才有那么点感觉。

如果真的是这样,我们的程序其实就是一段文本,传给后台,然后运行。类似于在sql中我们是用execute函数来执行一段被引号括起来的sql语句。

所以我们是否可以把宏当做文本编辑语言,或者最直接的就是一个字符串编辑语言,编辑生成一个字符串,然后将字符串提交给后台进行运行。

举个例子:

%let x=%str(data a;set sashelp.class;run;);
%PUT &x.;
&x.;

这段代码可以直接运行,而且生成了数据集A,那么这里的宏变量x其实就是一段可执行的sas代码,使用%str()是为了以防sas解析时认为;是句子的分隔符。

再看下一段代码:

%let x=%str(data r;);
%let y=%str(set sashelp.class;);
%let z=%str(run;);
%let s=&x.&y.&z.;
&s.;

这个的字符串拼接其实就非常明显了。

错误:ERROR: Open code statement recursion detected.

解决方法:单独执行run; quit;等即可。

宏拼接字符串的难点在于单引号双引号%&等特殊符号在何时应该被解析,我们提交给sas后台的代码不像其他语言那样是带有双引号或者单引号的!

今天先写到这里,后面我会进行更多的试验,把这方面的内容从理论和实际方面补齐。

时间: 2024-10-14 07:47:43

关于sas宏的一点想法的相关文章

关于UED前端开发的一点想法

5.2 关于UED前端开发的一点想法 5.2.1 目前UED前端代码是一个页面对应一个JS文件,更有甚者一个JS文件的代码会超过万行,这样的代码试想该如何维护?如果在从事前端开发的时候避免这种尴尬的局面,我想最好的方式就是分而治之, 如果分而治之?首先解析页面的一般思路,初始化(init) 事件绑定(event)页面读值(getData)页面写值(setData)重置页面(resetData)页面展示(setView)页面校验(checkData)页面异步加载 (ajax),页面测试(test)

多应用统一开发平台的一点想法

几年工作下来,发现有一个问题一直困扰着我们: 随着项目的越来越完善,功能越来越丰富,单一一个应用已经不能够支撑开发人员的需要.于是我们就需要根据业务分拆成几个相对独立的应用来满足多个开发团队的需求.但是这样也造成了一些问题,多个应用需要公用的基础代码维护起来越来越复杂,导致种种问题.也有很多种方式来解决,比如公共代码放置单独的地方,这样有带来的自动化部署方面的困难.在此,鄙人提出一种解决方法,即多应用统一开发平台的概念.在此以rails应用为例. 标准的rails应用结构如下: Gemfile

对当前网络路由的一点想法

五一小长假,和朋友开车去了浙江,发现了"基于目的地的最短距离算法"的弊端,也许就是这个算法导致了高速公路在某个时间段的定期规律性拥堵!从嘉定出发,G1501一路畅通,但是一旦转到G60沪昆高速,瞬间拥堵起来,实际上,早在G1501上时,就有公告牌,说沪昆高速有施工,可是大家还是全部转到了沪昆高速,留下S19/G15成了被抛弃的摆设...知道原因是什么吗?很简单,因为沪昆高速那条路最近!人们太相信导航,很少有人没事研究地图,所以很多人都上了当,当然这并不包括我.很多导航都是根据Dijks

Installshield关于.NET安装时需要重启动的处理办法,以及延伸出的重启后继续安装的安装包的一点想法

原文:Installshield关于.NET安装时需要重启动的处理办法,以及延伸出的重启后继续安装的安装包的一点想法 很多朋友做安装包的时候,所打包的软件需要.NET Framework之类的环境,他们会检测系统是否已经安装了.NET,如果没有,则调用.NET安装包来安装.但是.NET安装完是需要重启动的,一般来说,我们都推荐使用/q/norestart的静默安装函数来使重启动推迟到安装结束时,使用如下:LaunchAppAndWait(SUPPORTDIR^"dotNetFx40_Full_x

关于标签系统的又一点想法。

前段时间,写过一篇<关于标签系统的一点想法.>.但其实没有谈到里面的内容,是有一部分来自与刘鑫老师的聊天,当时他给了我许多肯定,也是让我觉得记录下来很有必要的原因. 前一篇里没有提到,我跟刘老师谈到一个更加深入一点的.关于标签系统的想法.主要原因是因为我尚不肯定这是否也属于标签系统.直到最近disylee 送了一本标签 : 标记系统设计实践给我,里面的一个小节让我为自己的想法找到了理论依据. 很不错的一本书,没有让我失望,解答了我心中的一些困惑.书有点啰嗦,但也正因为此显得"系统&q

对创业团队的一点想法

本人 没有强大的技术,没有广阔的人脉,没有超前的远见,只因在创业团队中待过一年,有了一些想法,即记录下来.这里对给我这次机会的公司表示感谢!这里说提互联网及软件方向的创业团队. 1. 不宜过早制度化 当然,对于打卡这样的制度并不排斥.但是对于对上百人团队的管理方法,不宜过早产生.比如详细区分不同部门,部门与部门有专门负责人.做一次软件发布要层层审批,经过同意后,再到发布,已经又有很多问题修复了. 部门与部门之间建立负责人,本意是为了不让沟通变的混乱,但创业团队,每个部门又能有多少人,本来只是找某

软件工程课程教育的一点想法

大学本科的软件工程课程一直遵循瀑布型的为线索的各个里程碑的相关知识点的展开介绍,现在多有理论框架与实践能力孰重孰轻之争.这里我也有一点点自己的看法. 软件工程在项目开发教学中的作用实质上类似计算机导论在计算机教育中的学科地位,应当属于前导性,线索性,框架式介绍,细思量其内容之广.理论之重.实践之繁的教学之繁重,本身就不是一个学期能承载得了的.既然教学大纲只安排一个学期,充其量,将来慢慢发展应当只是领学习者进门的而一个入门学科而已.而不是有些人说的那么危及及乎的想法. 站在更高一些的高度,比如体系

在老男孩学习的一点想法

今天是2015年12月28日,再过3天就是2016了,时间过得真快. 转眼间已经在老男孩学习快4个月了,整个课程即将结束,说一下在老男孩这段时间学习的感受. 老男孩是不是一个好老师,这个不需要我来说,凡是知道老男孩的都应该知道.O(∩_∩)O哈哈~~老师说,思维决定高度.从零开始学习一门新的知识,最重要的要有一个自己的框架,然后把一个一个零碎的知识点放到框架上.对于运维来说更是如此,因为运维所涉及的知识点更多,更杂,更乱,如果没有一个完整的清晰的整体知识框架,根本就不可能在运维这条路上有多大发展

有点想法系列:借助海尔平台打造智能家居的一点想法

前言:这只是本人做了一个无线通信项目,看了一篇文章,吃了一顿饭,饭桌上和同事讨论了手机行业(原谅京瓷和NEC都做过手机啊,原谅楼主村里人 没见识,感叹惊讶一下),之后加班,胡思乱想产生的个人想法,请不要嘲笑,照顾一下作者的弱小心灵,传播正能量. 物联网专业在我的母校西安理工大学已经开设,(分属计算机学院和自动化学院),最近畅想了一下智能家居,发现物联网这个很火爆的话题和概念,这么 多年了,却是依旧是现实中火不起来,比如海尔张瑞敏说的这么多年的要把海尔互联网化,其实现在海尔却仍是一个制造型企业,今