加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

5种创建宏变量方法

(2010-05-07 23:04:00)
标签:

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";

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有