由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Statistics版 - 请教一道SAS maro的题
相关主题
SAS ADVANCED 一道题求助求教sas adv题目
请教一个SAS Macro问题。谢谢sas macro 问题,
SAS Regression Macro 问题请教 (有包子)SAS Macro 莫名现象
请问SAS advanced macro global 和local一个关于macro的问题,多谢。
SAS call symput questionStupid SAS programming style is driving me crazy....
请教SAS adv 题库一道macro题Need advice on SAS macro debugging
请教SAS ADV 50 中的一道简单macro题目How to the macro regression with if?
问一些sas的问题a sas adv question
相关话题的讨论汇总
话题: dsn话题: printdsn话题: sas话题: macro话题: put
进入Statistics版参与讨论
1 (共1页)
s*******2
发帖数: 499
1
SAS advanced 50题有一道题是这样的。
The following SAS program is submitted:
%let a=cat;
%macro animal;
%let a=dog;
%mend;
%animal
%put a is &a;
Which one of the following is written to the SAS log?
Correct answer: d
a. a is
b. a is &a
c. a is cat
d. a is dog
这个题答案的讲解说用local macro variable.
但是sas online的学习资料给的讲解似乎相反(具体内如如下)。请指点迷津。多谢。
The %PUT statement within the macro definition will write the value of the
local variable dsn to the SAS log, whereas the %PUT statement that follows
the macro definition will write the value of the global variable dsn to the
SAS log:
%let dsn=sasuser.courses;
%macro printdsn;
%local dsn;
%let dsn=sasuser.register;
%put The value of DSN inside Printdsn is &dsn;
%mend;
%printdsn
%put The value of DSN outside Printdsn is &dsn;
When you submit this code, the following statements are written to the SAS
log.
SAS Log
199 %let dsn=sasuser.courses;
200
201 %macro printdsn;
202 %local dsn;
203 %let dsn=sasuser.register;
204 %put The value of DSN inside Printdsn is &dsn;
205 %mend;
206
207 %printdsn
The value of DSN inside Printdsn is sasuser.register
208 %put The value of DSN outside Printdsn is &dsn;
The value of DSN outside Printdsn is sasuser.courses
n****e
发帖数: 226
2
第一个 %let a=cat; 已经把 macro variable &a 定义成了 global variable.

【在 s*******2 的大作中提到】
: SAS advanced 50题有一道题是这样的。
: The following SAS program is submitted:
: %let a=cat;
: %macro animal;
: %let a=dog;
: %mend;
: %animal
: %put a is &a;
: Which one of the following is written to the SAS log?
: Correct answer: d

s*******2
发帖数: 499
3
是啊,我知道这点。
可是第二个例子中用%put得到的就是global variable阿。

【在 n****e 的大作中提到】
: 第一个 %let a=cat; 已经把 macro variable &a 定义成了 global variable.
n****e
发帖数: 226
4
第二个例子里 macro 内的dsn是local macro variable
只在 macro 内部有效
如果你再加两个 %put statement 来显示 local MV, global MV
你会发现 %put _local_ 给你的是:PRINTDSN DSN sasuser.register
%put _global_ 给你的是:GLOBAL DSN sasuser.courses
%macro printdsn;
%local dsn;
%let dsn=sasuser.register;
%put The value of DSN inside Printdsn is &dsn;
%put _local_;
%put _global_;
%mend;

【在 s*******2 的大作中提到】
: 是啊,我知道这点。
: 可是第二个例子中用%put得到的就是global variable阿。

s*******2
发帖数: 499
5
谢谢指点。我不明白的地方是在第一个例子里,在macro里面又定义了a,
我想a就有一个全局宏变量和一个局部宏变量。按照第二个例子,
%%put a is &a; 输出的应该是全局变量的值。可是答案却不是这样。
请问第一个例子和第二个例子有什么不同?好像都是有一个全局宏变量和一个局部宏变
量。

【在 n****e 的大作中提到】
: 第二个例子里 macro 内的dsn是local macro variable
: 只在 macro 内部有效
: 如果你再加两个 %put statement 来显示 local MV, global MV
: 你会发现 %put _local_ 给你的是:PRINTDSN DSN sasuser.register
: %put _global_ 给你的是:GLOBAL DSN sasuser.courses
: %macro printdsn;
: %local dsn;
: %let dsn=sasuser.register;
: %put The value of DSN inside Printdsn is &dsn;
: %put _local_;

n****e
发帖数: 226
6
两个例子的区别是第一个没有在 macro 里把 a 再定义成 local MV
你用 %put _local_;在第一 macro 里试一试看返回什么

【在 s*******2 的大作中提到】
: 谢谢指点。我不明白的地方是在第一个例子里,在macro里面又定义了a,
: 我想a就有一个全局宏变量和一个局部宏变量。按照第二个例子,
: %%put a is &a; 输出的应该是全局变量的值。可是答案却不是这样。
: 请问第一个例子和第二个例子有什么不同?好像都是有一个全局宏变量和一个局部宏变
: 量。

s*******2
发帖数: 499
7
明白了,谢谢。我在家没法用SAS,不过明白你的意思。你是不是说第一个例子,
在macro里面的a仍然是global variable?

【在 n****e 的大作中提到】
: 两个例子的区别是第一个没有在 macro 里把 a 再定义成 local MV
: 你用 %put _local_;在第一 macro 里试一试看返回什么

n****e
发帖数: 226
8
Yes.
From the SAS website:
"In most cases, once you define a global macro variable, its value is
available to you anywhere in the SAS session or job and can be changed
anywhere. So, a macro variable referenced inside a macro definition is
global if a global macro variable already exists by the same name (assuming
that the variable is not specifically defined as local with the %LOCAL
statement or in a parameter list). The new macro variable definition simply
updates the existing global one. "
There are two exceptions to this rule, you can read more here:
http://support.sas.com/documentation/cdl/en/mcrolref/61885/HTML

【在 s*******2 的大作中提到】
: 明白了,谢谢。我在家没法用SAS,不过明白你的意思。你是不是说第一个例子,
: 在macro里面的a仍然是global variable?

s*******2
发帖数: 499
9
多谢。

assuming
simply

【在 n****e 的大作中提到】
: Yes.
: From the SAS website:
: "In most cases, once you define a global macro variable, its value is
: available to you anywhere in the SAS session or job and can be changed
: anywhere. So, a macro variable referenced inside a macro definition is
: global if a global macro variable already exists by the same name (assuming
: that the variable is not specifically defined as local with the %LOCAL
: statement or in a parameter list). The new macro variable definition simply
: updates the existing global one. "
: There are two exceptions to this rule, you can read more here:

1 (共1页)
进入Statistics版参与讨论
相关主题
a sas adv questionSAS call symput question
macro variable 的问题请教SAS adv 题库一道macro题
how to make this macro work, thanks请教SAS ADV 50 中的一道简单macro题目
一道ADV 130 题目问一些sas的问题
SAS ADVANCED 一道题求助求教sas adv题目
请教一个SAS Macro问题。谢谢sas macro 问题,
SAS Regression Macro 问题请教 (有包子)SAS Macro 莫名现象
请问SAS advanced macro global 和local一个关于macro的问题,多谢。
相关话题的讨论汇总
话题: dsn话题: printdsn话题: sas话题: macro话题: put