楼主: 靳偌遥
2415 2

[问答] sas: 在data部中编好attrn函数后,整体移进macro里无法运行 [推广有奖]

  • 0关注
  • 0粉丝

博士生

34%

还不是VIP/贵宾

-

威望
0
论坛币
226 个
通用积分
111.3500
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
157139 点
帖子
4
精华
0
在线时间
565 小时
注册时间
2013-4-5
最后登录
2023-9-17

50论坛币
我的目的是提取数据集[tp_receipt1]中的观测数,将该值赋给宏变量“or”。编的程序如下:       
data _null_;
        o=open('tp_receipt1');
        n=attrn(o,'nobs');
        c=close(o);
        call symputx('or',put(n,8.));
run;
这段程序直接在sas中可以运行,也能成功对宏变量“or”成功赋值。但把这段程序整体移入宏程序后(如下),就没办法成功赋值了,而且log里也没有任何报错。求大神帮忙解答啊……
%macro a;
        %do i=2 %to 2;
        data tp_receipt1;
                set test_receipt1;
                if n_f_y=&i.;
        run;
        data _null_;
                o=open('tp_receipt1');
                n=attrn(o,'nobs');
                c=close(o);
                call symputx('or',put(n,8.));
        run;
%end;
%mend a;
%a;

最佳答案

prince315 查看完整内容

因为这里OR会成为局部宏变量,只在Macro内部有赋值,在Macro外面,OR应该是没有被定义。 可以在尝试 %macro a; %global or; .... %mend; 从而OR为全局宏变量,在宏外面也能正常使用。
关键词:Macro Data Mac ATT acr SAS
沙发
prince315 在职认证  发表于 2017-5-5 13:36:25 |只看作者 |坛友微信交流群
因为这里OR会成为局部宏变量,只在Macro内部有赋值,在Macro外面,OR应该是没有被定义。
可以在尝试
%macro a;
%global or;
....
%mend;
从而OR为全局宏变量,在宏外面也能正常使用。

使用道具

藤椅
靳偌遥 发表于 2017-5-5 15:32:27 |只看作者 |坛友微信交流群
prince315 发表于 2017-5-5 15:03
因为这里OR会成为局部宏变量,只在Macro内部有赋值,在Macro外面,OR应该是没有被定义。
可以在尝试
%mac ...
试了一下,确实是酱。。。谢谢帮大忙啦!!!

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-24 00:39