macro是在sas中很重要的一个内容,面试的时候常常会被问到。但是作为新手,一开始我们很少有机会能接触到使用Macro的内容。Macro在中文中翻译为宏,我个人的理解是,它是一个可以对于整个sas宏观所使用的程序,也正如它的名字一样,既不属于data step也不属于proc step。当我们在做一些重复的只需要改变操作对象的步骤时,可以利用宏来减少繁琐又重复的过程。这种感觉就像在sas中创建了一个函数,通过改变函数中的自变量而得到不同的结果与输出。

一. 定义宏变量与宏
1.定义宏变量
有两种方式定义宏变量:%LET和call symput。定义宏变量并分配一个值给宏变量的最简单方法是使用宏程序语句%LET。格式如下:
%LET 变量名=变量值;
另一个语句就是call symput,其格式如下:
call symput(变量名,变量值);

%let N=30;
data temp;
percent=(2+17+3)/&N;
run;

2.定义宏
定义宏的语句格式为:

%macro 宏名称(参数1,参数2,参数3);
宏文本
%mend 宏名字;

举个例子:

%macro test(sex);
data temp1;
set temp;
where sex=“&sex”;******注意此处要使用双引号而不是单引号*****;
run;
%mend test;%test(female)
%test(male)

我们可以通过改变宏中的参数,来对数据进行筛选。
当第一个宏在执行test的时候,便会将female这个值带入到&sex里, where statment就变成了
where sex=“female”;

二.自动宏

自动宏实际上就是系统自带的一些宏变量。以下为常用内容。
SYSDATE SAS启动时日期;
SYSDATE9 SAS启动时日期,但是以Date9.格式显示;
SYSTIME SAS启动开始的时间;
SYSDAY SAS进程开始是为星期几;

三. 在proc sql中创建宏变量

假设我们使用proc sql来计算数值,并将这些数值加入宏变量中,方便以后的调用,那我们可以使用 select into语句。
例如,我们想要计算在整个数据中,treatment里使用了placebo的人数:

proc sql noprint;
select count(USUBJID) into: N from adsl where treatment=‘Placebo';
quit;

那么此时,N就成为了宏变量,以后可以通过&N 来对这个数值进行调用。这是一个避免hard coding的好方法。

我们也可以通过select into 给多个宏变量进行附值,也就是相当于创建了一个宏变量的list。
例如,我们的id一共有3个,001,002,003,我希望把它提取出来,分别放进宏变量name1 name2 name3里:

proc sql;
select distinct(USUBJID) into : NAME1   -:NAME3 from adsl;
quit;

在这里,distinct的作用是选择不重复的id。

四.循环

我们使用宏的目的实际上就是为了避免重复的操作一些内容。在某种情况下,宏只需要调整同一个参数。我们可以采用不停的调用宏的方法来实现。也可以使用do循环帮我们省略更多的步骤(当然需要花费更多的脑力去思考)。

data see;
list='A,B,C,D';
run;%macro test(total,listing);
data a;
set see;
%do i=1 %to &total;
var&i=scan(&listing,&i,',');
%end;
run;
%mend test;%test(4,list);

和其他do loop一样,存在do until 与do while,使用格式如下
%do %while(表达式); (先判断再执行)
需要循环的内容;
%end;

%do %until(表达式); (先执行再判断)
需要循环的内容;
%end;

五. if 条件语句
在macro中,我们同样可以使用if-then 条件语句,使用格式如下
%if 条件 %then %do;
需要操作的内容;
%end;
%else %do;
需要操作的内容;
%end;

以上便是我在training阶段所学macro入门部分,等以后进组了学习更多再继续更新。

sas macro 入门相关推荐

  1. SAS MACRO Debugging option

    入职时间长了,自己写code的能力还是弱弱弱.除了在网上到处借(抄)鉴(抄).有以下两个感想: 一.如果代码不具有很好地共享性,那就是辣鸡..... 二.如果你觉得代码没有很好的共享性,那么就是自己菜 ...

  2. SAS | macro variables macro

    宏变量macro variable 宏变量是SAS宏工具的一部分,该工具用于扩展和定制SAS,并用于减少执行常见任务所必须输入的程序代码量 automatic macro variables自动宏变量 ...

  3. SAS小白入门第二节:SAS数据类型和格式化(输入和输出)

    数据类型 在其他编程语言中,有各种各样的数据类型,但是总体上,可大致分为:数值型,字符型和日期型,而SAS中的数据类型,只有2中数据类型:字符型和数值型.在这里,你会发现,日期型的去哪了?在SAS程序 ...

  4. SAS应用入门学习笔记1

    1.初始SAS 资源管理器:装我们数据的地方. Work:建立的临时数据集都在这里. 编辑器:增强型编辑器,里面主要是data步和proc过程步的程序书写. 其中有一个字体大小的设置,是在" ...

  5. sas应用入门(7.2)—— 平稳时间序列分析(建模)(精)

    #平稳序列建模 零.基本概念 1.两种方法工具 →{\to}→差分运算 →{\to}→延迟算子 2. 三种模型 →{\to}→AR模型 p-偏自相关系数 →{\to}→MA模型 q-自相关系数 →{\ ...

  6. SAS学习步骤和参考书

    SAS的强大毋庸置疑,要精通SAS必先要熟悉其结构及不断提高自己的编程能力(虽然它有菜单可以用,其实一般都不用,写程序比菜单灵活多了,而且效率高多了,工作中都以编程为主.所以想点点鼠标就能精通SAS的 ...

  7. sas时间和Linux时间转化,尝试在SAS中获取文件属性(文件大小,创建日期时间和上次修改日期时间)...

    我正在使用以下宏来使用SAS获取 Linux文件属性.我正在获取大小和上次修改时间的值,但没有获得"创建日期时间"的任何值.%macro FileAttribs(filename) ...

  8. SAS宏保存以便快速调用的三种解决方案(转载)

    1.方式一:%include %include "full_path\sortds.txt"; inserts any code in the file called sortds ...

  9. 用计算机核裂变模拟实验,SAS和蒙特卡罗模拟(1):开篇

    SAS for Monte Carlo Simulations (1): Introduction 一.为什么选择SAS做蒙特卡罗模拟? 为什么要用SAS做蒙卡?首先,对我来说,我只会用SAS,而且打 ...

  10. max std value 宏_新药临床试验统计分析中计量资料的SAS宏实现

    sunruihua@263.net 通讯地址: 100029 北京市朝阳区樱花东路 2 号中日友好医院科研处 在新药临床试验中, 研究的变量主要分为定量资料. 定性资料和半定量资料也就是平时常说的等级 ...

最新文章

  1. 业务方的一堆需求,CTO一句话就怼回去了!这招太好用了
  2. 从键盘输入4个学生的有关数据,然后把它们保存到磁盘文件中,最后从磁盘文件中读取数据输出到屏幕...
  3. ORM学员管理系统单表查询示例
  4. SQL取xml中节点值
  5. Hadoop伪集群环境搭建
  6. Linux Kernel TCP/IP Stack|Linux网络硬核系列
  7. Hive _偏门常用查询函数(二)附带实例(列转行、窗口函数)
  8. Android硬件访问服务框架思想初识
  9. [css] 你认为sass和less的最大区别是什么呢?你喜欢哪个?为什么?
  10. (一)关于NLP的概念和处理过程
  11. 情人节程序员用HTML网页表白【时光不老,我们不散love520】 HTML5七夕情人节表白网页源码 HTML+CSS+JavaScript
  12. oracle智能便携投影机,小火投影S10评测:让人眼前一亮的便携智能投影仪
  13. keras优化算法_Keras实现两个优化器:Lookahead和LazyOptimizer
  14. 微信里文件小程序导不出来_如何把小程序保存为文件 微信小程序导出文件
  15. matlab多重数值积分,Matlab数值积分和微分(一重、多重都有),简单实用。
  16. matplotlib画图(完全版)
  17. 数模算法:应用Logistic规律构建种群竞争模型
  18. IDEA+Java+SSM+Mysql+JSP实现Web宠物商城系统
  19. 初识RFID的物理与逻辑安全机制
  20. 很好的例子理解区别 Maximum Likelihood (ML) Maximum a posteriori (MAP)

热门文章

  1. 公开课:Excel做制冷仿真计算入门到提高
  2. wxparse加载本地html,微信小程序_使用wxParse插件_解析html代码
  3. 怎么删除映射网络里的计算机,如何映射网络驱动器 删除映射网络驱动器的方法...
  4. Object对象转JSON字符串
  5. 计算机安装软件没有管理员权限设置,实用技巧:如何在win10中安装没有管理员权限的软件...
  6. s7200cpu224xp手册_西门子S7-200 CPU224XP
  7. 浅析麒麟信安云几大优势之“安全性”篇
  8. arm64Linux网易云,网易云音乐arm版
  9. iOS手势全屏滑动返回
  10. 现有Unity项目修改渲染管线