全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3527 1
2013-10-31
悬赏 100 个论坛币 未解决
想问各位老师俩问题,如果有知道的,请给与明示,谢谢:)

代码如下:

复制代码

这段小代码旨在用过宏b来调用宏a,使得将a的返回值 &a. PUT出来。

遇到两个问题:
1. 在调用%b的时候,log返回的是:>>data a;run;   a<< 而不是期待的 >>a<<。
    请问,我想让data a;run;这句生效,并且不让他返回,应该用什么办法“保护并运行”它呢?
2. 请问在open环境下直接用%put函数,为什么不行呢?
    %put >>%a(a=a)<<;   LOG提示:a

谢谢各位帮助,我问题常常较多,如有烦扰,还望大神们谅解:)

二维码

扫码加我 拉你入群

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

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

全部回复
2013-11-1 08:32:02
SAS的宏和一般编程语言的函数不是一个东西

一般编程语言的函数中的参数是值的传递,你传进的数据就是局部的,做完一系列运算后得到的结果必须返回才行,否则函数运行完了就什么都不剩了

而SAS宏是文本原样的传递,你传进去的看似一个数据集,其实只是这个数据集的名字,你在宏里做的一系列操作,其实就是对这个数据集进行了操作,宏运行完之后,这个数据集也就发生变化了。另外只有宏变量有全局和局部的区分,其他的数据集什么的就没有了。所以SAS的宏一般是不搞什么返回值的。只不过还是有个例外,如果你非要返回一个值,并且可以用a=%macro()这样的方式把返回值赋给变量a,那么可以用我下面的方法,即宏的最后一行写上你要返回的值,且不加最后的分号。我下面给的程序应该可以满足你的要求了,只不过一般写SAS宏不这么折腾

%macro a(a);
    &a
%mend a;

%macro b(b);
  %put >>%a(a=&b)<<;
%mend b;

%b(b=Get It Out);

%put >>%a(a=It also works)<<;
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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