|
|
板凳

楼主 |
发表于 2008-10-15 02:49:19
|
只看该作者
Re: SAS Advanced Programming exam
I wish I had seen this post earlier.
#3 is really tricky to me, the complete program should be
/*
%MACRO LOOP1 (INPUT);
%LOOP2;
%PUT DATE IS &DATE;
%MEND;
%MACRO LOOP2;
DATA _NULL_;
CALL SYMPUT('DATE', '28SEP1998');
RUN;
%MEND;
%LET DATE=31DEC2006;
%LOOP1(&DATE)
*/
The point is that macro symbols created by CALL SYMPUT will be global if the local symbol table does not exist. That's the only exception because macro symbols generated (w/ new names) otherwise (within a macro) are all local.
Also, when a symbol name is already used in a global statement or within a macro of higher level, then the %let, call symput, select ... into ... statements will reference the existing symbol instead of creating a new local symbol! Only the %local statement and parameters always put symbols into local symbol table!
I missed this one, so another 3 or 4 similar questions popped up later for me. This is outrageous! Thought I was pretty good at macro?!
As a result, I finished only 13 out of the 19 questions for macro, 19 out of 20 for sql, and 26 out of 26 for the rest. Some other tricky ones:
/*
#1
%let one=two;
%let two=three;
%let three=last;
what does &&&&&one resolve to?
A. one
B. two
C. three
D. last
#2
%macro doit();
data _null_;
<missing statement>
run;
%mend;
%doit;
which statement can replace the missing statement and create a global symbol?
A. CALL SYMPUT('x', 2);
B. CALL SYMPUT(2, 'x');
C. CALL SYMPUT('x', 2, 'G');
D. CALL SYMPUT(2, 'x', 'G');
#3 (not exact, just something similar to the following, there're only 2 distinct values for sex)
%macro doit();
proc sql noprint;
%let n=19;
select distinct sex into :sex1-:sex&n from sashelp.class;
%do i=1 %to &n;
proc print data=sashelp.class;
where sex="&&sex&i";
run;
%end;
%mend;
%end;
%doit
How many reports will be produced?
A. 0
B. 1
C. 2
D. 19
#4 (not exact)
%let word = blahblah;
how to display "blahblah" in a title?
A. "&word"
B. '"'&word'"'
C. ""&word""
D. "%quote(&word)"
This question itself is confusing. I had thought blahblah needs to be double quoted in the title and found no answer is appropriate. But now I think double quotes need not to be displayed.
*/ |
|