第 12 讲 SAS 中的宏语言

本文使用数据集:
链接:https://pan.baidu.com/s/1SntXwLjVMsRrtMkiYqJdGQ 
提取码:61gn 
 

目录

一、SAS 宏

二、SAS 宏变量

三、宏参数

四、SAS 错误的处理

(一)句法错误

(二)词义错误

(三)数据错误

(四)运行错误

(五)常见错误


一、SAS 宏

利用宏可以减少在完成一些共同任务时必须输入的文本量

利用宏可以使程序模块化,使程序易读、便于修改、移植、方便重复使用

用 %macro 语句开始一个宏,同时给出这个宏的名字。如:%macro dsn

用 %mend 语句结束一个宏,其后给出宏名字。如:%mend dsn

放一个百分数符号(%)在宏名字的前面以调用一个宏,如%dsn

例1:macro

%macro create;                                                                                                                          
data tem;                                                                                                                               
set peixun.fitness;                                                                                                                     
if age>=50;                                                                                                                             
%mend create;                                                                                                                           
                                                                                                                                        
%create;                                                                                                                                
run;                                                                                                                                    
                                                                                                                                        
proc print data=tem;                                                                                                                    
run;

二、SAS 宏变量

宏变量属于 SAS 宏语言,与普通变量的区别是可以独立于 data 步

可以在 SAS 程序中除数据行之外的任何地方定义并使用宏变量

%let 语句定义宏变量并分配一个值给宏变量(如:%let dsn=3)

当引用一个宏变量的值,放 & 号在宏变量前

使用 %str 函数围住宏变量的值,使得在这个值内部的分号作为这个文本的部分,而不是 %let 语句的结束

使用 %put 语句在 log 窗口显示宏变量的值

SAS/BASE 中的自动宏变量,如:sysver,systime(给出 SAS 程序或会话开始执行的时间)

三、宏参数

被定义在一个 %macro 语句的宏名字后括号内的宏变量称为宏参数,可以直接给出宏参数的值,也可以在调用这个宏时给出这些参数的值

对参数分配的值只在这个宏执行时有效,而宏变量从用户创建直到 SAS 会话结束前都存在

例2:macroP1

data temp1;                                                                                                                             
set peixun.fitness;                      ##复制 fitness 数据集                                                                                               
run;                                                                                                                                    
                                                                                                                                        
%macro plot(yvar=age,xvar=weight);       ##开始一个宏 plot (宏参数yvar=age,xvar=weight)                                                                                              
proc plot;                                                                                                                              
plot &yvar*&xvar='*';                                                                                                                   
run;                                                                                                                                    
%mend plot;                                                                                                                             
                                                                                                                                        
%plot()                                                                                                                                 
%plot(xvar=runtime);                                                                                                                    
quit;

例3:macroP2

%macro create;                             ##create宏:复制数据                                                                                             
data temp;                                                                                                                              
set peixun.fitness;                                                                                                                     
if age>=50;                                                                                                                             
%mend create;                                                                                                                           
                                                                                                                                        
%The first macro generates DATA;                                                                                                        
                                                                                                                                        
%macro plot;                               ##plot宏:绘图                                                                                              
proc plot;                                                                                                                              
plot &yvar*&xvar=',';                                                                                                                   
run;                                                                                                                                    
%mend plot;                                                                                                                             
                                                                                                                                        
%The second macro generates PROC;                                                                                                       
                                                                                                                                        
%macro analyze(getdata,yvar,xvar);         ##analyze宏                                                                                             
title;                                                                                                                                  
%if %upcase(&getdata)=YES %then                                                                                                         
%do;                                                                                                                                    
%create                                                                                                                                 
title3*Data Set Created for The Plot*;                                                                                                  
%end;                                                                                                                                   
%plot                                                                                                                                   
%mend analyze;                                                                                                                          
                                                                                                                                        
%analyze(yes,age,weight);                                                                                                               
quit;

四、SAS 错误的处理

(一)句法错误

当程序语句与 SAS 语言准则不一致时发现的错误,如关键词拼错,少掉分号等

(二)词义错误

元素在当前程序语句中的用法是无效时产生,如 do over a

(三)数据错误

当有些数据值不适合用户规定的格式时出现 

(四)运行错误

当 SAS 执行程序时在数值上出现的错误,如用 0 作为除数,infile 引用的文件地址不存在等

(五)常见错误

1. 遗漏 run 语句,在活动窗口的标题栏里显示 proc(或data)step running

2. 遗漏分号,在 log 窗口中显示错误,将下一个有效的语句解释为无效的语句

3. 引号不配对,log 信息指明字符串太长或语句被混淆

4. 无效选项,log 指明选项无效或不认识

5. 出现错误时可以同时按下 ctrl+break 中断程序

6. 注意有汉字输入的程序中可能带来的输入法兼容性错误,解决方法是重新输入,并检查错误

例4:句法错

date a                             ##date 改 data                                                                                                     
input x y;                                                                                                                              
z=x*y;                                                                                                                                  
cards;                                                                                                                                  
1 2                                                                                                                                     
3 4                                                                                                                                     
5 6                                                                                                                                     
7 8                                                                                                                                     
;   
                                                                                                                                    
proc print;                                                                                                                             
tile '在data语句中丢失一个分号';                                                                                                        
run;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值