楼主: 靳偌遥
2729 2

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

  • 0关注
  • 0粉丝

博士生

34%

还不是VIP/贵宾

-

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

楼主
靳偌遥 发表于 2017-5-5 13:36:24 |AI写论文
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
拉您进交流群
GMT+8, 2025-12-24 12:30