Pages

9/27/11

SAS Adv130中80题

%let rc = Begin;
%macro test;
data out;
set sashelp.prdsale nobs = totalobs;
if totalobs > 10 then do;
%let rc = high;
end;
else do;
%let rc = low;
end;
run;
%mend;
%let rc = Before Execution;
%test

SAS公司专门出这些花哨又不适用的题目来忽悠在校的学生,唉,可悲啊。答案的确是a,原因如下:

1)语句%let rc = Begin;将宏变量rc第一次设置成全局宏变量。

2)第二步:if totalobs > 10 then do;
%let rc = high;
end;
else do;
%let rc = low;
x=3;
end;

这 步它设置了一个陷阱,一定要注意其中的if else语句是data步的条件语句,所以此时的rc宏变量其实应该是全局宏变量。也就是会说,不管你把这两个rc语句放在什么地方,只要在包含data 步内部,那么它就一定是全部宏变量,原因请参考宏变量的help资料。所以,如果你把上面的判断语句改成如下:

%if totalobs > 10 %then %do;
%let rc = high;
%end;
%else %do;
%let rc = low;
%end;;

那么结果就是high.原因就是这时候的%if语句已经变成宏的判断语句,显然,%if totalobs > 10 条件为真,故执行%let rc = high;而不会执行$else后面的%let rc = low;
3)第三步:%let rc = Before Execution;这个很简单,因为此时已经跳出data步,但是又在Macro内部,故它又是一个局部变量,局部宏变量只要宏退出,它就从内存退出。

综上,你看到的rc其实包含在不同的符号表里面,如下:

%let rc = Begin;包含在全局宏变量符号表;

%let rc = high;包含在全局宏变量符号表;并覆盖%let rc = Begin;

%let rc = low;包含在全局宏变量符号表;并覆盖%let rc = high;

%let rc = Before Execution;包含在局部宏变量符号表;与上面的全局宏变量不在同一个符号表里面,两者占用不同的内存空间。且%let rc = Before Execution会随着宏程序执行完毕而推出内存,所以最后你看到的当然是全局宏变量的那个值Low了。

明白了没有?

版主好像看错了。 %let rc = Before Execution 中的rc是在宏test的外面,不是局部宏变量. %test会将其内容复盖.
觉得这道题好像是考宏里面 if condition then do 与 %if condition %then %do 的区别. 试一试下面的步骤

1。run一下下面的code,
2。把 >10 改成 <10 再run一次
3。在 if,then,do,else,end 前加上%,再 run一次
4。再把 <10 改成 >10 再 run一次
对比一下log里的宏变量的值应该明白了

%macro test;
data out;
set sashelp.prdsale nobs = totalobs;
if totalobs > 10 then do;
%let rc = high;
%let local_rc = high;
end;
else do;
%let rc = low;
%let local_rc = low;
end;
run;
%put _user_;
%mend;
%let rc = Before Execution;
%test
%put _user_;

[此

6/24/11

SAS Base 认证考试 (转)

简单介绍一下考试
70 道单选题,我总共用了30分钟完成考试。要求65分pass。本人取得满分 100分。我自己准备了3个星期。不是很难。 考试界面跟 pass4sure的界面一样。所有的试题都在pass4sure 的题库里。成绩单请看下图。
相关材料:
1.A00-211 Actualtests PDF (June 11,2008) 70 题
2.50题
3.2008.09真题
4.123题
5.A00-201 (Killtest 30题)
6.SAS认证220道_练习题及详细答案
7.SAS online tutorial for base exam html版
8.临考时候的补充材料
9.SAS官方WEB培训教程—Prog I-1 SAS BASE PROGRAM II
复习方法:
先做 50题 2008.09真题 。这两个文件包含答案和具体解释。然后结合SAS online tutorial for base exam html版 具体学习和寻找答案。
SAS online tutorial for base exam html版 是sas公司提供的在线官方教程 431 美金!很有用的官方教程。SAS认证220道_练习题及详细答案 就是SAS online tutorial for base exam html版每章节后面的练习题
然后做123题,A00-201 (Killtest 30题) 和 A00-211 Actualtests PDF (June 11,2008) 70 题
最后做pass4sure 的题库。保证95分以上。
我就是按照这个方法考 满分。
如果就是为了通过考试。背会了pass4sure题库,A00-211 Actualtests PDF (June 11,2008) 70 题, 50题, 2008.09真题 也能保证95分以上。
有问题可以向我咨询。

本人正在准备 sas advanced 的考试。欢迎 考友联系分享经验。
A00-212 备考流程:
1. advance certification practice exam 50Q 官方主办的练习题,带有答案及解释。
2. acturalA00-212 153Q 080725 acturaltests 出版的最新的考试题(免费赠送)
3. SAS online tutorial for Advanced Exam (Html 版和PDF版)sas 官方网上教学
http://www.sas.com/apps/elearning/elearning_details.jsp?pubcode=61029

4. killtest080525 130Q killtest出版的最新考试题 130道
5. killtestA00-212 30Q killtest早期出版的考试题30道
6. 202 exam
study guide SAS 9 版本以前的考试题 经典练习题 130道
7. Notes Advance 的笔记。已经完整整理相关要点
8. SAS.Publishing.SAS.Certification.Prep.
Guide.Advanced.Programming.for.SAS.9.Nov.2007.pdf
官方考试书籍 129 美金
http://www.sas.com/apps/pubscat/bookdetails.jsp?pc=61642

复习方法
跟SAS base 的复习方法没什么区别
1. 先做advance certification practice exam 50Q (官方主办的练习题,带有答案及解释。)对照注解 进入 SAS online tutorial for Advanced Exam Html 版 找到相应的章节,学习,然后做章节的练习题
2.做相应的练习题 killtest080525 130Q killtestA00-212 30Q 202
exam study guide结合 online tutorial html 版 可以参看Notes 和SAS.Publishing.SAS.Certification.Prep.Guide.Advanced.Programming.for.SAS.9.Nov.2007.pdf
3. 考前模拟练习acturalA00-212 153Q 080725 和 Pass4sure 130Q 完全覆盖考试。100%高分考过。
4. 如果只是想考过,拿个证书 可以直接进入第三步。背会考题,保证高分通过。
附:考证不是目的。应用才是最重要的。有兴趣的话,可以参看人大视频。
有问题可以向我咨询