全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2467 2
2015-02-07
悬赏 10 个论坛币 未解决
问题1:
%put &value;
%let Mv=shoes;
%macro PRODUCT(Mv=bicycles);
%let Mv=clothes;
%put &Mv;
%mend;
%PRODUCT(Mv=tents)
%put Mv is &Mv;

这题输出的是shoes,说是因为macro里面的let建立的是局部宏变量,只在这个宏内有效。但为什么下面的code去掉了两个括号就输出的是clothes呢?这两个括号难道不是初始值和定义的值么?和局部/全局变量有关系?

%let Mv=shoes;
%macro PRODUCT;
%let Mv=clothes;
%put &Mv;
%mend;
%PRODUCT
%put Mv is &Mv;

问题2:
%macro CHECK(Num=4);
%let Result=%eval(&Num gt 5);
%put Result is &result;
%mend;
%check(Num=10)
这个code输出的是1,因为10大于5。但为什么变成5.1 后就输出的是0呢?而如果num=11,gt10.1,又输出的是1呢?这个code是怎么进行比大小的?



谢谢!!奋战advance中!
二维码

扫码加我 拉你入群

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

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

全部回复
2015-2-7 19:13:10
问题1:两段程序都在宏外Mv已经定义了全局变量,区别在于第二个宏里面的赋值得到的Mv依然是全局变量,只是改变了值,第一个宏由于多了个宏参数Mv,宏参数Mv为局部变量,所以宏里的Mv就变成了局部变量,在宏结束之后,第一个宏里面的局部变量Mv消失,只剩下了全局变量Mv,第二个宏里赋值的Mv由于是全局变量,没有消失。
问题2:%eval函数定义为在进行逻辑计算之前要求里面所有的变量值都是整数,所以在计算之前已经将所有的变量值转化为了整数。
二维码

扫码加我 拉你入群

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

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

2017-9-19 00:02:27
同问,这是为什么呢?
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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