标签:
sas |
分类: SAS数据挖掘 |
宏语言不仅功能强大而且伸缩性也很好。宏变量可以通过不同的技术和语句创建。然而,5种常见的创建方法不仅仅有用,而且最容易掌握。因为宏变量在宏语言中有很多使用方法,学习如何创建宏变量本身也是一种很好学习宏语言的方法。这五种方法包括:
1.%LET语句
%LET macro-variable-name = text-or-text-value;
%LET dsn = clinics;
%LET语句不能存储非嵌入的空格,以下定义的宏变量的值相同
%let nada =;
%let nada = ;
%let dsn =clinics;
%let dsn = clinics ;
使用宏变量
%LET DSN = CLINICS;
PROC CONTENTS DATA=&dsn;Ù
TITLE "DATA SET &dsn";
RUN;
PROC PRINT DATA=&dsn (OBS=10);
RUN;
显示宏变量
%LET dsn = clinics;
%PUT ***** selected data set is &dsn;
2.宏参数
%MACRO LOOK(dsn,obs);
PROC CONTENTS DATA=&dsn;
TITLE "DATA SET &dsn";
RUN;
PROC PRINT DATA=&dsn (OBS=&obs);
TITLE2 "FIRST &obs OBSERVATIONS";
RUN;
%MEND LOOK;
关键字或者命名参数
%MACRO LOOK(dsn=CLINICS,obs=);
PROC CONTENTS DATA=&dsn;
TITLE "DATA SET &dsn";
RUN;
PROC PRINT DATA=&dsn (OBS=&obs);
TITLE2 "FIRST &obs OBSERVATIONS";
RUN;
%MEND LOOK;
3.迭代%DO语句
宏语言允许用户定义%DO循环,和数据步中的DO循环相似。
%DO macro-variable = start %TO stop <%BY increment>;
. . . text . . .
%END;
%MACRO ALLYR(START,STOP);
DATA ALLYEAR;
SET
%DO YEAR = &START %TO &STOP;
YR&YEAR(IN=IN&YEAR)
%END;;
YEAR = 1900
%DO YEAR = &START %TO &STOP;
+ (IN&YEAR*&YEAR)
%END;;
RUN;
%MEND ALLYR;
4使用proc sql中的into
在宏变量中设置单一值
%let cln = Beth;
proc sql noprint;
select count(*)
into :nobs
from clinics(where=(clinname=:"&cln"));
quit;
%put number of clinics for &cln is &nobs;
创建多个宏变量值
proc sql noprint;
select lname, dob
into :lastnames separated by ',',
:dobirths separated by ','
from sasclass.clinics(where=(lname=:'S'));
%let numobs=&sqlobs;
quit;
%put lastnames are &lastnames;
%put dobirths are &dobirths;
%put number of obs &numobs;
将多个值赋予给多个宏变量
%macro varlist(dsn);
* Determine the list of variables in this
* base data set;
proc contents data= &dsn
out= cont noprint;
run;
* Collect the variable names;
proc sql noprint;
select distinct name
into :varname1-:varname999
from cont;
quit;
%do i = 1 %to &sqlobs;
%put &i &&varname&i;
%end;
%mend varlist;
%varlist(sasclass.clinics)
5.使用CALL SYMPUT
CALL SYMPUT(macro_varname,value);
data regn1;
set clinics;
where reg='1';
call symput('sex',sex);
run;
title1 "Region 1 data for &sex";