请选择 进入手机版 | 继续访问电脑版
楼主: Tigflanker
4892 5

[问答] 如何在宏环境的data步中执行宏语句 [推广有奖]

  • 8关注
  • 18粉丝

副教授

49%

还不是VIP/贵宾

-

威望
0
论坛币
2321 个
通用积分
9.8528
学术水平
179 点
热心指数
194 点
信用等级
167 点
经验
27443 点
帖子
622
精华
0
在线时间
851 小时
注册时间
2011-3-27
最后登录
2023-5-14

Tigflanker 发表于 2013-4-8 23:55:02 |显示全部楼层 |坛友微信交流群
50论坛币
我有这么一个想法:

%macro a;
%let abc=0;
data _null_;
do i=1 to 10;
  if i=12 then
  (宏语句,例如:%let abc=1;);
end;
run;
%put &abc;
%mend;

%a;

结果Put为“1”,显然%Let没受到if控制。

我记得在宏内的data步,是先运行里面的宏语句或者替换里面的宏变量的;我想请问下,有没有能在data步中由data步条件(例如if)控制宏语句的语句呢?就像call symputx这样的语句,谢谢。

最佳答案

zhengbo8 查看完整内容

LOG: 在execute()中,放宏代码的字符串。
关键词:data步 Data symput Macro call 如何
Bye SAS.
若有缘,能重聚。
zhengbo8 发表于 2013-4-8 23:55:03 |显示全部楼层 |坛友微信交流群
  1. %macro a;
  2. %let abc=0;
  3. data _null_;
  4.     %do i=1 %to 10;
  5.         %if i=12 %then %do;
  6.             call execute("%let abc=1;");
  7.         %end;
  8.     %end;
  9. run;
  10. %put &abc;
  11. %mend;

  12. %a;
复制代码

LOG:

2013-04-09_085902.gif


在execute()中,放宏代码的字符串。

已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
Tigflanker + 1 + 1 + 1 正解
webgu + 100 + 20 + 1 + 1 + 1 分析的有道理

总评分: 经验 + 100  论坛币 + 20  学术水平 + 2  热心指数 + 2  信用等级 + 2   查看全部评分

使用道具

pobel 在职认证  发表于 2013-4-9 11:20:23 |显示全部楼层 |坛友微信交流群
call execute()应该能够实现楼主的目的。
例如:

%macro a;
%let abc=0;
data test;
     a=2;
      if a=1 then call execute('%let abc=1;');
          else if a=2 then call execute('%let abc=5');
run;

%put &abc;
%mend;


%a
已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
Tigflanker + 1 + 1 + 1 感谢回答,谢谢!
webgu + 100 + 20 + 1 + 1 + 1 观点有启发

总评分: 经验 + 100  论坛币 + 20  学术水平 + 2  热心指数 + 2  信用等级 + 2   查看全部评分

和谐拯救危机

使用道具

webgu 发表于 2013-4-9 13:00:40 |显示全部楼层 |坛友微信交流群
感觉没有必要那样。

%macro a;
%let abc=0;
  %do i=1 %to 10;
      %if &i=12 %then   &abc=1;
         %end;
%put &abc;
%mend;

%a;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Tigflanker + 1 + 1 + 1 是的。其实就想套那个exe的方法。

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

使用道具

yger 在职认证  发表于 2013-4-9 13:06:02 |显示全部楼层 |坛友微信交流群
牛人很多!

使用道具

caibirdcnb 发表于 2017-11-10 21:59:34 |显示全部楼层 |坛友微信交流群
pobel 发表于 2013-4-9 11:20
call execute()应该能够实现楼主的目的。
例如:
然而,如果不是'%let abc=1’,而是'%let abc=数据步里的变量' 呢?

使用道具

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

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

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

GMT+8, 2024-3-29 14:44