楼主: Amandanannn
1461 4

[问答] SAS Advance 130题中第80题 [推广有奖]

  • 0关注
  • 1粉丝

本科生

6%

还不是VIP/贵宾

-

威望
0
论坛币
3 个
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
16704 点
帖子
40
精华
0
在线时间
79 小时
注册时间
2015-12-12
最后登录
2018-7-13

Amandanannn 发表于 2016-3-3 13:39:33 |显示全部楼层
求各位大神帮我看一下下面这道题:

80. The following SAS program is submitted:
%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

The data set SASHELP.PRDSALE has 50 observations.
What is the value of the variable RC when the macro finishes execution?
A.low
B.high
C.Begin
D.Before Execution

Answer: A

我想,它的运行顺序及宏变量的定义形式应该是: %let rc=Begin; ------Global
                                                                       %let rc=Before Execution; ------Global
                                                                       %test; (在这里rc会被赋值成high或low) ------Local
因为SASHELP.PRDSALE有50条observation,带到程序中后,50>10,那么%let rc = high,但是为什么答案会是A(low)呢??

十分不解,在此请各位大侠帮忙答疑解惑![em49] 多谢多谢!![em44]
关键词:ADVANCE advan VANCE ance Van

stata SPSS
孤单的我们 发表于 2016-3-3 13:51:32 |显示全部楼层
50>10%let rc = high为local宏变量
global中&rc的值是宏编译时生成的%let rc=low
回复

使用道具 举报

Amandanannn 发表于 2016-3-3 22:42:09 |显示全部楼层
谢谢您的回复! 可是,依然不是很明白,“50>10%let rc = high为local宏变量”——这个没问题,可是,“global中&rc的值是宏编译时生成的%let rc=low”——这个就不懂了!  %macro test难道不是local吗? 还有,当50>10的时候,运行到%let rc=high的时候不就终止了吗??
多谢多谢![em49]
回复

使用道具 举报

hftz3326 学生认证  发表于 2017-1-27 16:25:43 |显示全部楼层
Amandanannn 发表于 2016-3-3 22:42
谢谢您的回复! 可是,依然不是很明白,“50>10%let rc = high为local宏变量”——这个没问题,可是,“glo ...
我来告诉你,这题你没注意的是if不是%if哦,else也是,所以执行时是忽略他们的,所以rc不断地被赋值Global,从begin-high-low揪出来了
回复

使用道具 举报

wanqingyin7 学生认证  发表于 2018-7-10 03:34:18 |显示全部楼层
hftz3326 发表于 2017-1-27 16:25
我来告诉你,这题你没注意的是if不是%if哦,else也是,所以执行时是忽略他们的,所以rc不断地被赋值Globa ...
一语道破~ 谢谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 我要注册

GMT+8, 2018-11-17 06:50