a****e 发帖数: 5 | 1 马上要考试了,还有一些不明白的。请教一下大虾
1. The following SAS program is submitted: proc append data=M base=F; run;
Which SQL procedure program will produce the same results?
A. Proc sql; insert into F select * from M; quit;
B. Proc sql; select * from F outer union corr select * from M; quit;
C. Proc sql; create table F as select * from F intersect select * from M;
quit;
D. Proc sql; create table F as select * from F intersect corr select
* from M; quit;
Answer: A
|
s****m 发帖数: 57 | 2 先回答你两个,剩下的我查一下再回复你
1. outer union corr 相当于set,即两个table纵向concatenate,但如果两个表中的变
量名不match时,则用missing data填补,而不会直接将数据接上。proc append则不管
变量名,直接按位置对应接上。你如果用sas程序试,不要将两个表里的变量取同样的名字就可以看出差别来。
3. macro比data step先被编译,所以data step中嵌入的两个%let不受if控制。整个程
序一共出现了4次对rc变量的赋值,按次序后一个覆盖前一个,所以rc应该是最后赋的
那个值,即low |
s****m 发帖数: 57 | 3 2. call symput/symputx只有在local table存在时才创建local variable.否则创建
global variable. 换句话说,symput/symputx本身不创建local table,这是跟其
它定义local variable的方式不同的。怎样判断local table是否存在?也就是当前的
macro definition中是否定义了local variable(用symput/symputx方式定义的不算)。
不难发现one和two里面都没有定义local variable,因此不存在local table,所以
symput/symputx只能把新建的date写入global table。又由于调用macro在let之后,所
以覆盖let定义的date的值,故选A. |
a****e 发帖数: 5 | 4 Thank you so much for your input.
For the 1st question, there is no FORCE option for PROC APPEND. So,if the
variable names in the two data sets don't match, M can't attach to base F. I
still think answer B is also right. Confused...
的名字就可以看出差别来。
【在 s****m 的大作中提到】 : 2. call symput/symputx只有在local table存在时才创建local variable.否则创建 : global variable. 换句话说,symput/symputx本身不创建local table,这是跟其 : 它定义local variable的方式不同的。怎样判断local table是否存在?也就是当前的 : macro definition中是否定义了local variable(用symput/symputx方式定义的不算)。 : 不难发现one和two里面都没有定义local variable,因此不存在local table,所以 : symput/symputx只能把新建的date写入global table。又由于调用macro在let之后,所 : 以覆盖let定义的date的值,故选A.
|
a****e 发帖数: 5 | 5 The local symbol table of ONE is not empty (it contains parameter INPUT).
So, I think symput should 把新建的date写入 local table ONE.
【在 s****m 的大作中提到】 : 2. call symput/symputx只有在local table存在时才创建local variable.否则创建 : global variable. 换句话说,symput/symputx本身不创建local table,这是跟其 : 它定义local variable的方式不同的。怎样判断local table是否存在?也就是当前的 : macro definition中是否定义了local variable(用symput/symputx方式定义的不算)。 : 不难发现one和two里面都没有定义local variable,因此不存在local table,所以 : symput/symputx只能把新建的date写入global table。又由于调用macro在let之后,所 : 以覆盖let定义的date的值,故选A.
|
s****m 发帖数: 57 | 6 4. The sequence of search for a format is as follows:
SAS Supplied formats, work.formats, library.formats, A, F.X |
s****m 发帖数: 57 | 7 symput是在two中创建新变量的,不是在one中。每个macro program都有自己的local
table,不是共享的。two没有local table,所以不行。我没有听说过symput会搜索
closest nonempty table,建议你再查一下。我的理解是,对于嵌套的macro,虽然内
层的macro可以调用外层macro的local table中的变量,但这跟symput在创建变量时判
断当前的macro是否有local table没关系。
【在 a****e 的大作中提到】 : The local symbol table of ONE is not empty (it contains parameter INPUT). : So, I think symput should 把新建的date写入 local table ONE.
|
s****m 发帖数: 57 | 8 顺便问一句,你的130题的显示是正常的吗?那些表格我每个都不能正常显示。 |
s****m 发帖数: 57 | 9 我觉得B选项的输出是在output窗口上,他并没有创建data set。他应该像C和D选项那
样有create table as才对。
I
【在 a****e 的大作中提到】 : Thank you so much for your input. : For the 1st question, there is no FORCE option for PROC APPEND. So,if the : variable names in the two data sets don't match, M can't attach to base F. I : still think answer B is also right. Confused... : : 的名字就可以看出差别来。
|
a****e 发帖数: 5 | 10 same here. But you can figure it out easily.
【在 s****m 的大作中提到】 : 顺便问一句,你的130题的显示是正常的吗?那些表格我每个都不能正常显示。
|