关键词不能为空

当前您在: 主页 > 英语 >

acquirement第10章 SAS宏功能

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-01-28 02:23
tags:

acquirement-英语交流

2021年1月28日发(作者:顺藤摸瓜)



10




SAS


宏功能



10.1


概述


SAS


系统的


MACRO


处理器可 以让程序更简洁更明了及更容易维护,帮助


用户在使用


SAS< /p>


系统时更方便更自动化,具体来说,它具有以下功能:



1


.获取


SAS


的系统 信息;



2


.有条件地执行数据步和过程步;



3


.开发交互式系统;



4


.在不同的数据步和过程步之间传递数据;



5


.重复执行


SAS


代码



等等。


.


SAS


宏语言的管理



1



MACRO


变量



2



MACRO


程序语句



3


.< /p>


MACRO


表达式和函数




10.2 SAS


宏变量的使用与定义



宏变量< /p>


(


有时也称符号变量


)

< br>属于


SAS


宏语言的范畴


,


和数据步中


的变量的概念是不一样的。


除了 数据行外


,


你可以在


SAS

< p>
程序的任何


地方定义和使用宏变量


。数据步变量是 和数据集相联系的


,


而宏变量


是独立于 数据集的。数据集变量的值取决于正在处理的观测


,


而一个


宏变量的值总是




,


直到被明确改变。宏变量类似于一般变量的命


名方法。程序 中以




&


宏名



来引 用


MACRO


变量(有时为了清晰起


见 ,也可以通过



&


宏名


.


来 引用


MACRO


变量)



SAS


宏变量共有两种:



1




2





系统宏变量



用户自定义的宏变量。



10.2.1


系统宏变量



一些系统宏变量



01



/* Program_ */


02



DA


TA



_NULL_;


03



PUT 'SYSDATE='


TE








/*


执行时的日期



*/


04



PUT 'SYSDAY='










/*


执行时是星期几



*/


05



PUT 'SYSENV='










/*


交互模式或批次模式



*/


06



PUT 'SYSSCP='










/*


返回正在用的操作系统



*/


07



PUT 'SYSJOBID = '




/*


程序的操作执行代码



*/


08



PUT 'SYSERR='










/*


程序执行的错误码



*/


09



PUT 'SYSRC='











/*


程序执行的回复码



*/


10



PUT 'SYSLIBRC='





/*


使用


LIBNAME


时设置是否正确



*/


11



PUT 'SYSFILRC='




/*


使用


FILENAME


时设置是否正确


*/


12



RUN;



使用宏语句



%put


_automatic_;


可以查看所有的系统宏变量,结果 显示在


LOG


窗口。




SYSDATE=20OCT08


SYSDAY=Wednesday


SYSENV=FORE


SYSSCP=WIN


SYSJOBID = 384


SYSERR=0


SYSRC=0


SYSLIBRC=0


SYSFILRC=0


NOTE: DATA statement used:








real time












0.03 seconds








cpu time













0.01 seconds


10.2.2


用户自定义宏变量



定义方法及其使用




等号右边可以是数值或字符串表达式,字符串用引号


括起来

.


字符串前后的空格赋值前被删除。



%LET mac_var=


取值
















等号左边是宏名


.

< br>定义好的


MACRO


变量可以在不同的

< br>SAS


数据步或过程步


中重复使用,该

< br>MACRO


变量的值不会改变


.


引用时直接用


&


宏名


.


即可


.


宏变


量定义可以放在程序的任何位置,


但在使用之前一定要定义好


.




1



01



/* */


02



%LET mm=07;


03



DATA outl;


04



FORMAT var_a YYMMDD10.;


05



INPUT var_a :YYMMDD6.;


06



IF month(var_a)= &mm;


07



DATALINES;


08



010203


09



010721


10



010322


11



010723


12



010103


13



010402


14



;


16



PROC PRINT;


17



TITLE


数据月份


:&mm


18



RUN;



注:这里的标题必须用双引号括起来


,


而不能用单引号


,


因为


宏处理器只对双引号

< br>中引用的宏变量进行这种处理


,


而把单引号中的所有字符 都看作是标题的内容。







结果:



数据月份


:07







07:57 Wednesday, October 20, 2008




2











































Obs










var_a












































1






2001-07-21











































2






2001-07-23


注:如果要查看用户自定义的宏变量,可以提交语句


%put _USER_;


如果要查看所有宏变量,可以提交语句


%put _ALL_;



可将


SAS

< p>
的一段程序设为


MACRO


变量

< br>



2



一个宏变量代表一行语句时



01



/* Program_ */


02



%LET mm = INPUT



var_a :YYMMDD6.;


03



DATA outl;


04



FORMAT var_a



YYMMDD10.;


05



&mm;


06



DATALINES;


07



010203


08



010721


09



010322


10



010723


11



010103


12



010402


13



;


14



RUN



一些宏函数



1


)宏函数


%str




3


一个宏变量代表多行语句时,可 用宏函数


%str


来实现



01



/* Program_10-2-3_ */


02



DATA out1;








































































03



INPUT Income Age;

































































04



DATALINEs;







































































05



1500 23











































































06



2600 35











































































07



2000 28











































































08



3000 30











































































09



1800 19











































































10



;

















































































11



run;




12



%let dsn=out1;


13



%let yvar=Income;


14



%let xvar=Age;


15



%let plot=%str(Proc plot;plot &yvar*&xvar;run;); /*


宏变量也可以嵌套引用


*/


16



DATA temp;



17



set &dsn;


18



if Age>=20;


19



&plot;


20



Proc print;


21



Title subsetof &dsn;


22



run;


SAS


数据步有关的一些宏函数



2


)宏函数


%EV


AL


:当表达式中数字为整数时,把表达式转化为具体数值赋给


宏变量。如果表达式中数字不是整数,使用函数


%sysevalf(

< br>表达式


)





4


%let


m1=10/2;


data


aaa;


x=&m1;



proc



print


;



run


;


这种情况下,


赋值运算使宏变量的值直接进行转化。


但如果不是赋值语句,


则必须使用宏函数




5



%let


m1=10/2;


%let


m2=10.5/3;


%let


c1=


%eval


(10/2);


%let


c2=


%eval


(10.5/3);


%let


c3=


%sysevalf


(10.5/3);



%put


&m1 &m2 &c1 &c2 &c3;



Log


窗口




ERROR: A character operand was found in the %EVAL function or %IF condition where a numeric










operand is required. The condition was:10.5/3


359



%let c3=%sysevalf(10.5/3);


360




%put &m1 &m2



&c1 &c2 &c3;


10/2 10.5/3



5



3.5



2


)宏函数


%SYSFUNC


(数据步函数名(自变量)



<


输出格式


>




功能:将数据步的函数值传递给宏变量。





6


%let


mm=sqrt(3+2);


%let


ss=' a3 '


data


aa;


x=&mm;


y=&ss;


run


;


结果:


































Obs








x








y










































1






2.23607





a3


< /p>


这种情况下,


赋值运算使宏变量的值直接进行转化。


但如果不是赋值语句,


则必须使用宏函数




%let


mm=datetime();


%let


m2=

< p>
%sysfunc


(datetime(),datetime20.);


title




&mm



;


title2




;


title3




;


%put



data


a;


x=&mm;


y=


%sysfunc


(today(),


yymmdd6.


);


proc



print


;


format


x


datetime20.


;


run


;



100



%put














20OCT1993:10:38:06




datetime()








07:57 Wednesday, October 20, 2008




4









































20OCT1993:10:38:06










































20OCT1993:10:38:06

































Obs
























x








y


































1








20OCT1993:10:38:06


< br>3


)函数


CALL



SYMPUT


用法:CALL



SYMPUT




宏变量名



,变量或表达式)



功能:在数据步中,把一些变量或计算结果赋给宏变量。



data team1;


input position : $$8. player : $$12.;


call symput (position,player);


datalines;


shortstp Ann


pitcher Tom


frstbase Bill


;


proc



print


;


run


;



data c;


input holiday mmddyy.;


call symput('holdate',trim(lef t(put(holiday,worddate.))));


datalines;


070497


;


run;


proc



print


;


run


;




%put


函数


SYMGET


用法:



SYMGET




宏变量名





功能:在数据步中,调用已经定义好的宏变量。



data


b;


x=symget(


'holdate'


);


proc



print


;


run


;


931020






%LENGTH


%UPCASE


%SUBSTR


%SCAN


详见


p525


SQL


过程中定义宏变量的方法



PROC SQL;


Select


变量


1


,变量


2



……



INTO :


宏变量


1


,:宏变量


2



……



FROM


数据集;



data


a;



input


a b@@;



datalines


;


1 2 3 4 5 6 7 8



run


;


proc



sql



noprint


;



select


a,b,mean(a)


as


c



into


:x1-:x4,:y1-:y4,:z



from


a;


%let


m=&z;


%put


&x1 &x2 &x3 &x4 &y1 &z;



10.3



宏程序



宏程序就是存贮的

< p>
1


个文本


,


最简单的宏程 序工作起来很象


1


个宏变量


,


但是复杂


的宏程序可以做许多宏变量无法完成的事。

对简单的文本代换,


用宏变量效率高;


但是当任务比较复杂 的时侯,宏程序就要优越得多了,当某部分的


SAS


程序是


经常重复使用时,便可通过宏程序的方式来简化编程


.


10.3.1.


简单定义及引用



语法及调用:



%MACRO


宏程序名;



语句;



%MEND;


(或


%MEND


宏程序名;




调用


: %


程序名










这一行语句可出现在


SAS


程序的任何位置


,


除了数据行

< br>.


注:宏程序定义中不能出现数据行、


datalin es


等。



宏程序提交之后,编译过的 宏存放在


r


中。


一些保留词不能用作宏名,详见


P537






1


01



/* Programs_ */


02



%MACRO mac_pgm


03



PROC FREQ;


04




TABLE var_a;


05



RUN


06



PROC PRINT;


07



RUN;


08



%MEND;



09



DATA out1;


10



INPUT var_a$$ @@;


11



DATALINES;


12



1 2 3 3 2


13



4 1 2 2 1


14



3 5 1 2 1


15



2 3 3 1 2


16



3 3 3 4 5


17



;


18



%mac_pgm


19



DATA out2;


20



INPUT var_a$$ @@;


21



DATALINES;


22



3 1 1 2 1


23



2 1 1 3 3


24



2 1 5 3 2


25



4 5 4 5 1


26



3 1 3 1 2


27



;


28



%mac_pgm





2



宏变量与宏程序可结合使用



01



* Program_10-3-1_ */


02



%let dsn=out1;


03



%let yvar=Income;


04



%let xvar=Age;


05



%macro plot;


06




Proc plot;


07



plot &yvar*&xvar;


08



run;

acquirement-英语交流


acquirement-英语交流


acquirement-英语交流


acquirement-英语交流


acquirement-英语交流


acquirement-英语交流


acquirement-英语交流


acquirement-英语交流



本文更新与2021-01-28 02:23,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/576282.html

第10章 SAS宏功能的相关文章

  • 爱心与尊严的高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊严高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊重的作文题库

    1.作文关爱与尊重议论文 如果说没有爱就没有教育的话,那么离开了尊重同样也谈不上教育。 因为每一位孩子都渴望得到他人的尊重,尤其是教师的尊重。可是在现实生活中,不时会有

    小学作文
  • 爱心责任100字作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任心的作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文