全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
5213 7
2017-03-13
请高手解答,这两个code到底是哪里不一样呢?为什么出来的结果不同呢?

62         %let a =cat;
63         %macro animal (a=frog);
64         %let a=bird;
65         %mend;
66         %animal(a=pig)  %put a is &a;
a is cat
67         run;
68         
69         
70         %let a=cat;
71         %macro animal;
72         %let a=bird;
73         %mend;
74         %animal
75         %put a is &a;
a is bird
76         run;

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2017-3-13 10:49:13
由宏的参数指定的宏变量是local宏变量,%let指定的是global宏变量~我这么理解的~
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-3-13 15:46:06
加个 options symbolgen mlogic mprint;在运行程序的前面,log显示如下:
******************************************************
81         options symbolgen mlogic mprint;
82         
83           %let a =cat;
84                %macro animal (a=frog);
85                 %let a=bird;
86                 %mend;
87                 %animal(a=pig)
MLOGIC(ANIMAL):  Beginning execution.
MLOGIC(ANIMAL):  Parameter A has value pig
MLOGIC(ANIMAL):  %LET (variable name is A)
MLOGIC(ANIMAL):  Ending execution.
88                  %put a is &a;
SYMBOLGEN:  Macro variable A resolves to cat
a is cat
**********************************************
我的理解是 sas里面逻辑运算 真与假 的问题 导致宏变量&a. 取值问题:
这里第一个程序 你让&a=frog 恒真 才会执行 %macro animal,否则不执行%macro animal。
你的调用 &a=pig 不是取给定的 frog ,so %macro animal 不执行。
你把%animal(a=pig)  换成 %animal(a=frog) ,则会执行宏%animal。
==============================================
下面一个 宏参数为空,即这宏%animal 恒真,不管其他,这宏只要调用 都会100%执行,即执行宏里面的%let a=bird; overwrite了前面的
  %let a =cat;
so




二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-3-14 09:53:13
renjingli2011 发表于 2017-3-13 10:49
由宏的参数指定的宏变量是local宏变量,%let指定的是global宏变量~我这么理解的~
虽然我也是这么理解的,但是括号里的值总觉得不make sense.
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-3-14 09:57:09
lovexialulu 发表于 2017-3-13 15:46
加个 options symbolgen mlogic mprint;在运行程序的前面,log显示如下:
****************************** ...
我可以这样理解吗,因为a的值不是frog也不是pig,所以就返回一开始global设定的值?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-3-14 10:12:16
Eidui 发表于 2017-3-14 09:53
虽然我也是这么理解的,但是括号里的值总觉得不make sense.
如果你把宏参数从a变成b,结果就跟不设置是一样的,还是你这个宏变量是local的原因~
%let a = cat;
%macro animal(b=frog);
%let a = bird;
%put &a.;
%mend;
%animal(b=pig);
%put a is &a.;
结果是‘a is bird’
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群