sas试题课笔记一.doc

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/●宏编程技术●/

●怎样显示宏变量的值?解释下面的程序;

/●注意在解释程序时每一句需要解释且结果要解释●/

data_null_; /●通过数据步处理数据,但不建立数据集●/

%let a=first; /●建立宏变量a,值为first●/

%let b=macro variable; /●用宏程序语句%let定义宏变量,一个%let语句只

能定义一个宏变量;

%put &a !!! &b !!!; /●‘&宏变量名’引用宏变量的值;%put语句显示

宏变量的值,将文本输出到 SAS的日志窗口;

/●在log窗口输出 first !!! macro variable !!!●/ run; /●提交程序●/

●答 %put是显示宏变量最简单的方法;

/●9——解释并调用下面一段宏●/

%macro names(name, number); ●定义含参数的宏,宏参数是一种特殊的宏变

量;

%do n=1%to &number; /●利用宏循环语句循环生成一系列字符串,循环

宏变量n从1到&number●/

&name&n /●调用宏变量name和宏变量n,生成字符串●/

%end; /●结束宏循环语句●/

%mend names; /●结束宏names的定义●/

%names(sas,6); /●调用宏names●/

/●11.在数据步中变量x的值赋于给宏变量A时这两种程序都可以吗●/

call symput('A',x); ●将变量的值赋于宏变量,一个子程序只

能将一个变量的值赋于宏变量;

%let A=x; ●%let语句定义的是宏变量的值,调用宏变量A时,相当于

调用了字符串x;

●答:不可以,应该用call symput('A',x)%let定义的宏变量,其值为赋值

符号后面的字符串'X',不会进行变量运算;

data a;

set data.class nobs=nobs;

call symput ('b',nobs);

%let a=nobs;

%put &a &b; ●从下面的日志窗口的结果可以看出宏变量a的值被定义

为字符串‘nobs’而宏变量b的定义为变量nobs的值; run;

/● data a;

26 set data.class nobs=nobs;

27 call symput ('b',nobs);

28 %let a=nobs;

29 %put &a &b;

nobs 19

30 run;

NOTE: 数字值已转换为字符值,位置:(行:列)。

●/

/●12.解释下面语句的结果●/

%let x=5;

%let y=%eval(&x+200);●%eval()宏计算函数可以将整数文本暂时转换为一

个数值并对整数值的表达式进行计算,结果也取整数; %let z=&x+200; ●只是将一个字符串赋予宏变量z,将宏变量x的值+200

形成的表达式赋给Z;

%put &y &z;

●205 5+200——日志窗口的结果;

data%substr(&sysday,1,3);●创建了空数据集/临时数据集work.wed

数据集的名字为系统宏变量sysday的值的前三个字符形成

的字符串,sysday的值为今天星期几的英文单词;

run;

●宏字符函数%substr()——提取字符串中的字串

produce a substring of argument, beginning at position, for length number of characters.

syntax: %SUBSTR (argument, position<, length>);

●自动宏变量sysday——Contains the day of the week that a SAS job or session began executing

Details

You can use SYSDAY to check the current day before executing code that

you want to run on certain days of the week, provided you initialized your SAS session today.

(1,9)wednesday,

(2,9)EDNESDAY

(3,9)DNESDAY——不明白;

/●17——使用%include语句将一个大数据集拆分成多个小数据集

根据数据集resdat.qttndist中的变量stkcd将其拆分成多个数据集,其中stkcd的格式为$6.;●/

data a;

set data.qttndist;

by stkcd;

if last.stkcd;

keep stkcd;

put n;/●有什么作用?●/

run;

data_null_;

set a nobs=n;/●什么意思?●/

file'd:\dc\number.txt';

a=right('%a(');

b=',stk)';

put a $stkcd $b $;

run;

%macro a(name,s);

data ex.&s&name;

set data.qttndist;

if stkcd=&name;

run;

%mend a;

%include"d:\dc\number.txt";

/●老师的方法●/

proc sort data=data.qttndist out=stkcd(keep=stkcd);

by stkcd;/●运行出错为什么?●/

run;

data stkcd(keep=stkcd);

set data.qttndist;

by stkcd;

if last.stkcd;/●选取每个by组中的最后一条记录,以去掉重复的股票名称●/ run;

data_null_;

set stkcd;

file'd:\dc\split.txt';

a='%split(';

b=');';

put a $ stkcd $ b $;

run;

%macro split(stkcd);

data stk&stkcd; /●stk是所有数据集都相同的的故不需要设为

宏参数——体会宏程序的本质及其构造思路——由一至多●/ set data.qttndist;

if stkcd=&stkcd;

run;

%mend split;

%include'd:\dc\split.txt';

/●18●/●利用上一题生成的数据集。。SAS数据集导出多个TXT文本。设数据集名称为resdat.qttndist,

要求导出3个文本000001.txt,000002.txt,000003.txt,变量名及变量格式

相关文档
最新文档