楼主: Tigflanker
1818 4

[问答] 想用SAS宏生成文本 [推广有奖]

  • 8关注
  • 18粉丝

副教授

49%

还不是VIP/贵宾

-

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

楼主
Tigflanker 发表于 2012-10-27 22:21:47 |AI写论文
80论坛币
请问各位老师,我想用SAS宏生成批量的文本,请问应该什么写呢?

例如,我想生成如下效果:

  1. abc02nam
  2.   AFTER ENTRY
  3.     IF abc02nam=. THEN
  4.       GOTO efg
  5.     ENDIF
  6.   END
  7. END

  8. abc03nam
  9.   AFTER ENTRY
  10.     IF abc03nam=. THEN
  11.       GOTO efg
  12.     ENDIF
  13.   END
  14. END
复制代码


代码段中,只有两段文本,我想做个宏产生大量的这样的语句;我想做成的效果大概如下:

%macro creat(nam,num);

%do i=1 %to #   //用一个循环产生大量的文本
abc&i.nam
  AFTER ENTRY
    IF abc&i.nam=. THEN
      GOTO efg
    ENDIF
  END
END

(space)
%end;

%mend;

意思就是这样,请各位老师给予帮助,非常感谢!!!

最佳答案

ziyenano 查看完整内容

%macro creat(num); %do i=1 %to # %if &i
关键词:SAS宏 After ENTRY Space creat
Bye SAS.
若有缘,能重聚。

沙发
ziyenano 发表于 2012-10-27 22:21:48
%macro creat(num);
%do i=1 %to #
%if &i<10 %then %do;
%put
abc0&i.nam
  AFTER ENTRY
    IF abc0&i.nam=. THEN
      GOTO efg
    ENDIF
  END
END

(space);
%end;
%else %do;
%put
abc&i.nam
  AFTER ENTRY
    IF abc&i.nam=. THEN
      GOTO efg
    ENDIF
  END
END

(space);
%end;
%end;
%mend;

%creat(10);
已有 1 人评分学术水平 收起 理由
Tigflanker + 1 其实想用的就是%put这种形式

总评分: 学术水平 + 1   查看全部评分

藤椅
ziyenano 发表于 2012-10-27 22:41:23
data ex;
input text:$200.;
cards;
run;

%macro creat(num);
proc sql;
%do i=1 %to &num;
%if &i<10 %then %do;
insert into ex  values
("abc0&i.nam
  AFTER ENTRY
    IF abc0&i.nam=. THEN
      GOTO efg
    ENDIF
  END
END

(space)");
%end;
%else %do;
insert into ex  values
("abc&i.nam
  AFTER ENTRY
    IF abc&i.nam=. THEN
      GOTO efg
    ENDIF
  END
END

(space)");
%end;
%end;
quit;
%mend;

%creat(10);
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Tigflanker + 1 + 1 + 1 感谢回答。

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

板凳
Tigflanker 发表于 2012-10-28 00:08:16
ziyenano 发表于 2012-10-27 22:41
data ex;
input text:$200.;
cards;
非常感谢,我加问一下,我想在log中简单输出的行吗?因为再新用sql建表不太方便,我想能出来的结果就是类似:

abc01nam
。。。
end

abc02nam
。。。
end

。。。

这样的形式,谢谢啊首先。
Bye SAS.
若有缘,能重聚。

报纸
bobguy 发表于 2012-10-28 09:32:59
Why need a macro, it can easily done in a data step.

data text;

do i=1 to 5;
        x=catt('abc',put(i, z5.), ' AFTER ENTRY    IF abc', put(i, z5.),
               'nam=. THEN      GOTO efg    ENDIF  ENDEND(space)');
        output;
end;
run;

proc print;run;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Tigflanker + 1 + 1 + 1 非常感谢bob老师,不过我里面还要加一些复杂.

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

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-9 06:24