最近一周为了准备考试,经常在这里混,感谢各位前辈的经验,考试很顺利,几乎没有生题。
现在趁着记忆还热络,赶紧写一下回馈本版。
就像之前大家总结的那样,如果只是为了准备考试,那么95题(70+25)和123题这两样是最重要的,一定要在理解的基础上吃透。除此之外楼主做的准备就是:
1. 先读了一遍little sas book打底,这个估计以后可以当工具书翻。
2. 有一些比较鸡贼的知识点疑问就去看官方的Prep Guide(例如不太好记的Proc report各种繁多的选项)。
3. 学以致用,有的题目可以自己装个SAS先跑跑例子,眼见为实见证结果是怎样的。尤其像input里各种花样读数据的方式,建议实际跑一下,比如little sas book上第二章讲输入时的那个南瓜例子:
DATA contest;
*libname mylib 'D:\SAS9\My SAS Files\9.0\Little SAS Book Codes';
filename myfile 'D:\SAS9\My SAS Files\9.0\Little SAS Book Codes\Pumpkin.dat';
INFILE myfile;
*LENGTH Name $16; /*either way OK, as long as pointer moves correctly*/
*INPUT Name $16. Age 3. +1 Type $1. +1 Date MMDDYY10.
(Score1 Score2 Score3 Score4 Score5) (4.1);
INPUT Name $1-16 +1 Age 2. +1 Type $1. +1 Date MMDDYY10. (Score1 - Score5) (4.1);
*(Score1 Score2 Score3 Score4 Score5) (4.1);
RUN;
这里用column来控制输入,加上指定指针跳来跳去非常微妙,如果试着稍微改一下就可能面目全非结果不对,所以多试试,多想想,例如不按书上给的方式,还能怎么玩可以得到同样结果?像我的注释行和运行行都能输出正确结果,我还尝试了先指定length再换informat等等,多样花式作死吃鳖后我终于理解了指针读进来和读完后停留的位置。总之理解才是王道。
言归正传,今天考的题里印象比较深的变形题可以结合简的这个两天前的机经看看:
https://bbs.pinggu.org/thread-5547729-1-1.html
基本上八九不离十。
主要有:
95题:
17 仍旧是三个western输出,答案位置改成了D
21 GT30变成GT50,答案因此变成1
注意看清,是用sale GT 50,有时候可能用变形price来筛。
31题不变,比较考量人的是第三行不会再读入了
35 改为了else output other,答案2,2,1
42 改成了填空,经典改动,答案5,是Australia的us起始位置
123题:
50
改填空了,大家都知道是by IDNumber Expenses
这里最好打字时细心点,像楼主一开始指头粗Expenses没打全,后来检查时惊出一身冷汗。
109 著名的ruth题,记住读的永远是下一列的对应数据。
此外,eof=1这个知识点考了两遍。
几个sort考题里注意desecending的作用范围,而且字符排序和数值排序不一样。
set, length, format的各种变形组合问变量长度,反正就一个原则:谁先来,谁就占着长度,后头重复定义都无效。
retain的初始值和作用。
另外有个ods的题可以有结论了,就是无论ods html中间夹杂了多少个proc,
ods html file = '';
proc print data = xxx;
proc freq data = xxx;
ods html close;
它们的输出结果都会存到同一个html里,所以正确答案是both.
今天幸亏没碰上曾经让我抓狂的字符串函数赋值变量的返回长度,不然又会在考场纠结半天的。
现在来说说唯一一道让我想了半天没办法确定的面目比较生的题:
大概题目是这样的:
给你一个set emp, 里面有三行数据
name permexp tempexp
admin 5x 某数字
education 25 7
xxx 30 5
然后这段程序里有:
data totalemp;
set emp;
retain totalexpens;
if _N_ =1 then totalexpens = 0;
else
totalexpens = permexp + tempexp;
run;
然后四个备选答案:
首先上来排除第一行totalexpens结果不为0的两个答案。
name permexp tempexp totalexpens
admin 0
education 25 7 32
xxx 30 5 ?
剩下两个答案里,第二行都是32,这也没问题,关键是第三行有区别,一个是35,一个是67.
那么这里考的就是,到底前头那句retain会不会影响到totalexpens的求和结果?
想了半天,应该是不影响,因为即便retain了,后头进入_N_=3的时候,它求和根据的两个变量是第三行新读进来的数据,又不是跟自己相加,所以retain了也管不着。因此最后正确答案是只加第三行的求和。
我们熟记的姿势往往是A+B;等同于retain A 0; A= SUM(A, B) ;
但这题里没考跟自己叠加,所以看清楚表达式很重要。
就这样,祝大家都顺利通过!
4/25编辑:亦将余勇追穷寇,楼主决定一鼓作气开始向ADV进军,这贴接下来就主要记录这个过程给自己打气啦。5月16编辑:今天以100%又考过了ADV,所有题目都在63题和机经范畴之内,但仍然充斥大量变形,临考时需仔细审题。有几个题还挺刁钻的让人纠结了一会儿。比如各种场合引用macro时哪里要双引号哪里不要,到底几个双引号。
基本上考题里就一个原则:只有用到%if exp表达式那里不需加双引号,其他统统加。
还有关于Proc FCMP的选择题cmplib我是完全都没读过这个知识点硬背的答案,侥幸过了。